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 :

builddir=${1}
patchdir=${2}
shift 2
patchlist=${@}

for i in $patchlist ; do
...
done
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 :

$ 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
Je voudrais avoir :
*.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.

En attendant j'ai trouve une solution mais elle ne me plait guere :
# 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
...
Merci

Ludovic