Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: robert 08. 02. 2011, 17:19:25
-
Dobrý den, mám následující skript:
#!/bin/bash
EXCLUDE="--exclude="{a,b,c}
echo $EXCLUDE
Vypisuje: --exclude{a,b,c}
a potřebuji, aby vypsal --exlude=a --exclude=b --exclude=c. Prosím o radu, R.
-
proměnnou WHAT čtu ze souboru, neznám ji dopředu - viz:
#!/bin/bash
WHAT={a,b,c}
EXCLUDE=`echo "--exclude"$WHAT`
echo "$EXCLUDE"
-
EXCLUDE=`eval echo "--exclude"$WHAT`
-
Problém je v tom, že to {a,b,c} neboli "brace expansion" se provádí dříve, než $... neboli "parameter expansion". Takže je opravdu nutné si pomoci přes echo:
EXCLUDE=`echo --exclude={a..c}`
echo $EXCLUDE
(v příkladu je ještě ukázka toho, jak zjednodušit to ",b,")
-
Díky za rady, to funguje OK. Snažil jsem se příklad maximálně zjednodušit, ale v mém příkladu stále nevím.
EXCLUDES="*.7z;*.tar.gz"
APPENDSTR=`eval echo "--exclude={"$EXCLUDES | tr -s ';' ','"}"`
echo $APPENDSTR
Dál pak zavolám tar s tím exclude ...
-
Ještě prosím o radu. Funguje to takto (prosím o nástin řešení bez pomocné proměnné):
EXCLUDES="S;Z;*.tar.gz"
HLP=`echo $EXCLUDES | tr -s ';' ','`
APPENDSTR=`echo --exclude={$HLP}`
eval echo $APPENDSTR
-
Moc děkuji za všechny reakce, nyní si mohu odpovědět sám:
} musí být na konci, jinak ho bere program tr jako argument
EXCLUDES="S;Z;*.tar.gz"
APPENDSTR=`echo --exclude={$EXCLUDES | tr -s ';' ','`}
eval echo $APPENDSTR