Bonjour,
Voila je vous expose mon petit soucis. J'ai un script qui peut recevoir un nombre d'arguments variables, les deux premiers (obligatoires) sont des repertoires et les suivants sont des patches a appliquer.
Ces arguments peuvent etre de differents types : un repertoire, une archive ou meme un regex du type *.patch.
Au depart je faisais quelque chose du genre :
Le soucis c'est que lorsque ma boucle arrive a une regex du type *.patch, la regex est interpretee. Un exemple sera plus clair qu'une explication :builddir=${1}
patchdir=${2}
shift 2
patchlist=${@}
for i in $patchlist ; do
...
done
Je voudrais avoir :$ mkdir test_bash
$ cd test_bash/
$ touch toto1.patch
$ touch toto2.patch
$ for i in "*.patch my_archive.tar.bz2" ; do echo $i ; done
toto1.patch toto2.patch my_archive.tar.bz2
Est-ce que vous voyez une solution pas trop tordue ? Une solution serait peut-etre de mettre un caractere d'echappement avant l'etoile mais je ne peux pas presumer de la regex qu'on me donnera.*.patch my_archive.tar.bz2
En attendant j'ai trouve une solution mais elle ne me plait guere :
Merci# go to the patch directory because $patchlist is interpreted when doing
# for i in $patchlist
pushd ${patchdir}
index=0
for i in $patchlist ; do
patchlist_interpreted[${index}]="$i"
index=`expr ${index} + 1`
echo patchlist_interpreted[${index}]=$i
done
popd
for index in "${!patchlist_interpreted[@]}" ; do
...
Ludovic
Partager