Portée des variables en ksh
Bonjour,
J'ai simplifié mon code à l'extrême pour bien mettre en évidence mon problème (d'où le uuoc).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #!/bin/ksh
function _TTW_test
{
typeset isOk=0
echo "1. $$ isOk='${isOk}'"
typeset line
# Check each non empty line of the file
#egrep -v '^[ \t]*(#|$)' | while read line ; do
cat | while read line ; do
echo "Check failed for line: '${line}'"
echo "2a. $$ isOk='${isOk}'"
isOk=1
echo "2b. $$ isOk='${isOk}'"
done
echo "3. $$ isOk='${isOk}'"
return ${isOk}
}
echo "foo\nbar" | _TTW_test |
dont le résultat est:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| $ echo $KSH_VERSION
@(#)PD KSH v5.2.14 99/07/13.2
$ ./test-typeset-while.ksh
1. 6889 isOk='0'
Check failed for line: 'foo'
2a. 6889 isOk='0'
2b. 6889 isOk='1'
Check failed for line: 'bar'
2a. 6889 isOk='1'
2b. 6889 isOk='1'
3. 6889 isOk='0' |
Si je laisse le "cat |" ou si je le remplace par le "egrep" commenté, j'obtiens systématiquement '0' en sortie de boucle au lieu du '1' attendu.
C'est uniquement lorsque je le supprime complètement que j'obtiens '1'.
Quelqu'un peut-il m'expliquer ce qui m'apparaît comme un mystère... à moins que ce ne soit un bug du ksh!
Merci d'avance pour vos explications.
)jack(