bash quoting, word splitting oder was auch immer

Matthias Czapla dermatsch at gmx.de
Don Aug 28 22:13:53 CEST 2003


Frank Loeffler wrote:
> Matthias Czapla wrote:
> >EXCL="--exclude='bla/*' --exclude='suelz'"
> 
> Lass die ' weg:
> 
> EXCL="--exclude=bla/* --exclude=suelz"
> 
> Dann sollte das klappen. Eine genaue Erklaerung kann ich aber nicht 
> liefern, vielleicht kann das ja jemand anders. :-)

Ich glaub ich habs jetz gerafft. bash manpage:

       The  order of expansions is: brace expansion, tilde expan­
       sion, parameter, variable  and  arithmetic  expansion  and
       command  substitution  (done  in a left-to-right fashion),
       word splitting, and pathname expansion.
       [...]
       After  the  preceding expansions, all unquoted occurrences
       of the characters \, ', and " that did not result from one
				     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       of the above expansions are removed.
       ^^^^^^^^^^^^^^^^^^^^^^^

Versteh ich so, nach der variable expansion von $EXCL bleibt
--exclude='bla/*' --exclude='suelz'
übrig, wobei die Apostrophe nicht entfernt werden weil sie aus der
vorhergehenden expansion resultieren. Im Gegensatz zu direkt auf der
Kommandozeile eingegebenen Apostrophen.

> Allerdings ueberlege ich mir gerade, dass die ' ja durchaus einen Sinn 
> haben (Man stelle sich Namen mit Freizeichen drin vor).

Ich nehm an, die muss man dann escapen.

> Ein Verzeichnis 
> 'bla/a b' verhindert trotz Weglassen der ' aber nicht das Einpacken von 
> 'b'. Das verstehe ich jetzt nicht. Vielleicht ist es schon zu spaet. :-)

tar cf test.tar --exclude=bla/a b [...] a b bla test suelz
würde ja das b als non-option Argument zum einpacken betrachten und nur
bla/a excluden?

Gruß
lal