otazka pro bash guru

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Úterý Září 11 22:36:27 CEST 2007


On Mon, 10 Sep 2007, Milos Prudek wrote:

> echo "gimp-2.2 -i -b '${CMD}' '(gimp-quit 0)'"
> gimp-2.2 -i -b '${CMD}' '(gimp-quit 0)'
> ...
> A poslední řádek je zcela stejný jako předposlední.

Není. V předposledním řádku je všechno zabalené do uvozovek, které pak 
potlačí speciální význam apostrofů uvnitř, a proto se ${CMD} expanduje.

V podstatě by asi stačilo v posledním řádku napsat "${CMD}" místo 
'${CMD}' (ono by stačilo dokonce jen "$CMD"). Případné speciální znaky 
uvnitř $CMD nemají žádný efekt, když je proměnná expandovaná uvnitř 
uvozovek (a nepřiplete se do toho nějaký eval).

Ono dokonce bylo možno napsat přímo něco jako

  gimp-2.2 -i -b "(fuzzy-border-pattern \"$1/*.*\" $2 $3)" '(gimp-quit 0)'

jediná speciální věc je \" místo " (samozřejmě to předpokládá, že do 
parametrů budete dávat jen věci, ze kterých se samotný Gimp neosype, když 
se takhle plácnou přímo do jeho skriptu).

Troufám si říct, že je to jednodušší než ten "four-liner" v Pythonu.

Doporučuji strávit více času studiem kapitoly "EXPANSION" v bash(1). :)


--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."






Další informace o konferenci Linux