Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: robert 08. 02. 2011, 17:19:25

Název: Jednoduchá expanze v Bashi
Přispěvatel: 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.
 
Název: Re: Jednoduchá expanze - dovysvětlení
Přispěvatel: robert 08. 02. 2011, 17:43:02
proměnnou WHAT čtu ze souboru, neznám ji dopředu - viz:

#!/bin/bash

WHAT={a,b,c}
EXCLUDE=`echo "--exclude"$WHAT`

echo "$EXCLUDE"
Název: Re: Jednoduchá expanze
Přispěvatel: branchman2 08. 02. 2011, 18:55:27
EXCLUDE=`eval echo "--exclude"$WHAT`
Název: Re: Jednoduchá expanze v Bashi
Přispěvatel: MilanK 08. 02. 2011, 20:15:17
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,")
Název: Re: Jednoduchá expanze v Bashi
Přispěvatel: robert 09. 02. 2011, 01:47:43
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 ...
Název: Re: Jednoduchá expanze v Bashi
Přispěvatel: robert 09. 02. 2011, 08:59:32
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
Název: Re: Jednoduchá expanze v Bashi
Přispěvatel: robert 09. 02. 2011, 09:46:42
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