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