Lorsque tu fais "cat file | commande", en interne bash forke un sous-shell, avec tout son environnement, pour "commande" et le connecte au pipe.
Dans ton cas, tout ce qui est fait par le "while..." est dans ce sous-shell, y compris l'incrémentation de la variable. Mais l'environnement du sous-shell n'est pas retransmis au père à la fin ! Quand tu lis cette variable plus loin dans ton script, elle a toujours sa valeur d'avant le fork. C'est une "autre" variable en somme.
C'est visible de cette manière:
I=1
cat file.txt | { while read REF_LINE
do
let I++;
echo $I;
done
echo dedans: $I
}
echo dehors: $I
2
3
4
dedans: 4
dehors: 1
La tout de suite, je ne sais pas comment regler le probleme...
# le pipe crée un sous-processus indépendant
Posté par daggett . En réponse au message [Bash] Boucle while - export variable. Évalué à 3.
Dans ton cas, tout ce qui est fait par le "while..." est dans ce sous-shell, y compris l'incrémentation de la variable. Mais l'environnement du sous-shell n'est pas retransmis au père à la fin ! Quand tu lis cette variable plus loin dans ton script, elle a toujours sa valeur d'avant le fork. C'est une "autre" variable en somme.
C'est visible de cette manière:
I=1
cat file.txt | { while read REF_LINE
do
let I++;
echo $I;
done
echo dedans: $I
}
echo dehors: $I
2
3
4
dedans: 4
dehors: 1
La tout de suite, je ne sais pas comment regler le probleme...