Script shell : probleme avec les variables
Fermé
damien
-
9 janv. 2007 à 10:32
pouldo Messages postés 8 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 13 janvier 2009 - 10 janv. 2007 à 10:27
pouldo Messages postés 8 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 13 janvier 2009 - 10 janv. 2007 à 10:27
A voir également:
- Script shell : probleme avec les variables
- Script vidéo youtube - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Microsoft activation script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
3 réponses
pouldo
Messages postés
8
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
13 janvier 2009
3
10 janv. 2007 à 10:27
10 janv. 2007 à 10:27
Si tu fais un pipe, la partie droite est executee dans sous-shell (forcement, puisque les parties droites et gauches doivent s'executer en meme temps). Qu'est-ce que la partie droite de ton pipe ? Tout ce qui est entre le "while" et le "done", compris. Donc tu modifies une variable dans un sous-shell, ce qui ne modifie evidemment pas sa valeur dans le shell pere. Et ton "echo" est dans le shell pere.
Une solution est d'ouvrir un parenthese apres le "|" et de la fermer apres ton dernier "echo". Ca a pour effet de lancer tout le contenu des parentheses dans un sous-shell, plutot que seulement l'expression qui suit le pipe.
Une solution est d'ouvrir un parenthese apres le "|" et de la fermer apres ton dernier "echo". Ca a pour effet de lancer tout le contenu des parentheses dans un sous-shell, plutot que seulement l'expression qui suit le pipe.
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 janv. 2007 à 19:00
9 janv. 2007 à 19:00
Salut,
Tout simplement parce que à la sortie de la boucle, ta variable "$str" a toujours la valeur que tu lui a passée lors de son initialisation, à savoir 'str=""', autrement dit rien.
Pour t'en convaincre, initialise ta variable avec un nom quelconque et tu verras que non seulement ce nom sera inclus en début de chaque ligne "parsée" par ta boucle, mais sera affiché par ta dernière instruction "echo $str" en sortie de boucle.
;-))
Tout simplement parce que à la sortie de la boucle, ta variable "$str" a toujours la valeur que tu lui a passée lors de son initialisation, à savoir 'str=""', autrement dit rien.
Pour t'en convaincre, initialise ta variable avec un nom quelconque et tu verras que non seulement ce nom sera inclus en début de chaque ligne "parsée" par ta boucle, mais sera affiché par ta dernière instruction "echo $str" en sortie de boucle.
;-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
9 janv. 2007 à 19:17
9 janv. 2007 à 19:17
Salut,
et pourquoi pas tout simplement
et pourquoi pas tout simplement
str=$(cat log_file) echo $str