bash - brace expansion will nicht

04/01/2009 - 11:02 von Knorpi | Report spam
Hallo,

folgendes Problem:

ROOTDIR=/home/knorpi
SUBDIRS=dir1,dir2
echo${ROOTDIR}/{${SUBDIRS}}

ergibt:
/home/knorpi/dir1,dir2

gewollt war aber:
/home/knorpi/dir1 /home/knorpi/dir2

Die Klammern in der Echo-Anweisung, die die Erweiterung veranlassen sollen
(Klammern 3 und 6) wirken nicht.

Woran liegts?

Grüße
Knorpi
 

Lesen sie die antworten

#1 Arno Welzel
04/01/2009 - 11:42 | Warnen spam
Knorpi schrieb:

folgendes Problem:

ROOTDIR=/home/knorpi
SUBDIRS=dir1,dir2
echo${ROOTDIR}/{${SUBDIRS}}

ergibt:
/home/knorpi/dir1,dir2

gewollt war aber:
/home/knorpi/dir1 /home/knorpi/dir2

Die Klammern in der Echo-Anweisung, die die Erweiterung veranlassen sollen
(Klammern 3 und 6) wirken nicht.

Woran liegts?



Brace Expansion wird immer vor der Variablenersetzung gemacht, steht
auch so in der Dokumentation:

Zitat:

Brace expansion is performed before any other expansions, and any
characters special to other expansions are preserved in the result. It
is strictly textual. Bash does not apply any syntactic interpretation to
the context of the expansion or the text between the braces. To avoid
conflicts with parameter expansion, the string "${" is not considered
eligible for brace expansion.

(Zitat Ende)

Ein möglicher Workaround:

ROOTDIR=/home/knorpi
SUBDIRS=dir1,dir2
echo `eval echo ${ROOTDIR}/{${SUBDIRS}}`

Das funktioniert jedenfalls hier mit dem gewünschten Ergebnis:

/home/knorpi/dir1 /home/knorpi/dir2


http://arnowelzel.de
http://de-rec-fahrrad.de

Ähnliche fragen