Bonjour,
J'ai simplifié mon code à l'extrême pour bien mettre en évidence mon problème (d'où le uuoc).
dont le résultat est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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'
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(
Partager