[bash] Probleme de variables dans un fichier

Résolu
Tanith Messages postés 3 Statut Membre -  
jipicy Messages postés 41342 Statut Modérateur -
Bonjour,

Voici mon probleme :

j'ai un fichier test.var qui contient la ligne suivante :
-v var_1=$valeur_1 -v var_2=$valeur_2

j'ai un script qui doit lire le fichier et mettre dans une variable le contenu de la ligne en valorisant les variables $valeur_1 et $valeur_2

exemple :

valeur_1=10
valeur_2=20

chaine=`cat test.var`
echo $chaine


ici $chaine devrait contenir :

-v var_1=10 -v var_2=20


mais ce n'est pas le cas, et je ne connais pas la méthode pour y arriver.

Merci de votre aide

Bonne journée

Tanith
A voir également:

3 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Le shell en général procède à l'interprétation des caractères spéciaux de la ligne de commande .
Dans le cas de remplacement de variable, il ne procède pas à une nouvelle interprétation de la ligne générée (quoique avec les nouvelles versions c'est pas tout à fait vrai), et de ce fait les caractères spéciaux ne sont pas interprétés.
C'est pour quoi il faut donc faire interpréter la commande par "eval".

Petit exemple :
[tmpfs]$ A=B;B=C     # Déclaration des variables

[tmpfs]$ D=$A     # En affectant la valeur de $A à D on espère obtenir la valeur de $B en fait

[tmpfs]$ echo $D     # On essaie d'afficher la variable ainsi affectée

B               # Ben non ! C'est la valeur de $A qui s'affiche

[tmpfs]$ eval "D=\"\$$A\""     # En forçant l'évaluation, le shell évalue la chaîne $A et effectue le remplacement

[tmpfs]$ echo $D     # On essaie d'afficher la variable ainsi affectée

C     # Bingo ;-))

[tmpfs]$
En mode débogage c'est encore plus parlant :
[tmpfs]$ set -x

[tmpfs]$ A=B;B=C

+ A=B
+ B=C

[tmpfs]$ D=$A

+ D=B

[tmpfs]$ echo $D

+ echo B
B

[tmpfs]$ eval "D=\"\$$A\""

+ eval 'D="$B"'
++ D=C

[tmpfs]$ echo $D

+ echo C
C

[tmpfs]$  
;-))
1
dubcek Messages postés 19021 Statut Contributeur 5 637
 
Hi
mettre des backslashes devant les $ pour q'ils ne soient pas interprétés lors du cat
-v var_1=\$valeur_1 -v var_2=\$valeur_2
0
Tanith Messages postés 3 Statut Membre
 
Merci pour ta réponse,

mais aprés le cat du fichier je voudrais bien que la variable soit évaluée et remplacée par sa valeur prédéfinie dans le script ...

merci encore

Tanith
0
dubcek Messages postés 19021 Statut Contributeur 5 637
 
Avec quel shell ?

export valeur_1 valeur_2

alors la substitution devrait jouer
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,
#! /bin/bash

valeur_1=10
valeur_2=20

eval "chaine=\"$(cat test.var)\""
echo "$chaine"
Ce qui donne :
[tmpfs]$ cat test.var

-v var_1=$valeur_1 -v var_2=$valeur_2

[tmpfs]$ ./foo.sh

-v var_1=10 -v var_2=20

[tmpfs]$
:-))
0
Tanith Messages postés 3 Statut Membre
 
Merci beaucoup jipicy,

Ca marche super bien !!!

Pour des fins d'éducation pourrais-tu prendre le temps d'expliquer en détails la ligne magique ?

eval "chaine=\"$(cat test.var)\""


Parce que ca marche bien mais je ne comprends pas vraiment pourquoi :-)


Encore un gros merci

Bonne journée

Tanith
0