[bash] Probleme de variables dans un fichier

Résolu/Fermé
Tanith Messages postés 3 Date d'inscription jeudi 9 août 2007 Statut Membre Dernière intervention 9 août 2007 - 9 août 2007 à 14:57
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 9 août 2007 à 18:25
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
9 août 2007 à 18:25
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 18719 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 mai 2024 5 615
9 août 2007 à 15:08
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 Date d'inscription jeudi 9 août 2007 Statut Membre Dernière intervention 9 août 2007
9 août 2007 à 15:20
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 18719 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 mai 2024 5 615
9 août 2007 à 15:50
Avec quel shell ?

export valeur_1 valeur_2

alors la substitution devrait jouer
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
9 août 2007 à 16:00
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 Date d'inscription jeudi 9 août 2007 Statut Membre Dernière intervention 9 août 2007
9 août 2007 à 16:18
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