[bash] Probleme de variables dans un fichier
Résolu
Tanith
Messages postés
3
Statut
Membre
-
jipicy Messages postés 41342 Statut Modérateur -
jipicy Messages postés 41342 Statut Modérateur -
Bonjour,
Voici mon probleme :
j'ai un fichier test.var qui contient la ligne suivante :
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 :
ici $chaine devrait contenir :
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
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:
- [bash] Probleme de variables dans un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
3 réponses
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 :
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]$;-))
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
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
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]$:-))