Bonjour,
avec bash version 4.1.5
j’utilise eval dans une boucle pour factoriser un traitement répétitif sur n fichiers d’entrée (ici : 2 ) et autant de fichiers de sortie ( voire aussi, de fichiers de log ).
Les noms des fichiers seront identiques sauf une lettre finale ( A et B ) pour les différencier.
Avec exactement la même syntaxe, eval renvoi une valeur non évaluée ($racine) et une valeur évaluée comme je l’attend ($md5).
La seule différence que je vois est que la chaine non évaluée commence par une chaine et continue par une variable, alors que la chaine évaluée contient en plus une variable au début.
La fonction reste la même: une simple affectation qui sera utilisée dans une commande comme variable.
Cette différence n’est probablement pas en cause, car j’ai essayé avec une variable vide pour que la première ressemble au plus près à la seconde.
dir_dest="~/tmp/funiq/"
racine_A="$1"
racine_B="$2"
racine_C="~/tmp/funiq/"
echo "racine_A: $racine_A" ## affiche bien /le/chemin/donne/
for i in A B C; do
eval racine="racine_${i}" ; ## donne racine_A au lieu de sa valeur
eval md5="${dir_dest}md5_$i" ; ## donne bien sa valeur et non md5_A
echo "racine=$racine" ; ## affiche "racine_A"
echo "md5 = $md5"; ## affiche "/home/user/tmp/funiq/md5_A"
.. le reste du code ..
done
( Pour tester j’ai ajouté en C le même chemin que pour md5, avec un comportement identique à A et B, aussi inefficace )
J’ai bien essayé d’imbriquer les $ et les {} de toutes les façons possibles: soit des erreurs de syntaxe avec injures légitimes de bash, soit le même résultat désespérant;
j’ai aussi evalué une deuxième fois les résultats d’eval ( avec echo ), sans plus de succès.
quelqu’un de plus perspicace aurait-il la clé du problème ?
Merci à tous