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