[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
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
A voir également:
- [bash] Probleme de variables dans un fichier
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir un fichier .bin - Guide
- Impossible de supprimer un fichier - Guide
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 897
9 août 2007 à 18:25
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 :
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]$;-))
dubcek
Messages postés
18764
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
9 février 2025
5 624
9 août 2007 à 15:08
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
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
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
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
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
dubcek
Messages postés
18764
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
9 février 2025
5 624
9 août 2007 à 15:50
9 août 2007 à 15:50
Avec quel shell ?
export valeur_1 valeur_2
alors la substitution devrait jouer
export valeur_1 valeur_2
alors la substitution devrait jouer
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
9 août 2007 à 16:00
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]$:-))
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
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 ?
Parce que ca marche bien mais je ne comprends pas vraiment pourquoi :-)
Encore un gros merci
Bonne journée
Tanith
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