Bonjour,

J'ai simplifié mon code à l'extrême pour bien mettre en évidence mon problème (d'où le uuoc).
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
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
$ 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(