2011-10-25 4 views
4

Je voudrais faire z une variable globale dans le code suivant:variable globale dans le script shell

#!/bin/bash                               
z=0; 
find $1 -name "*.txt" | \ 
while read file 
do 
    i=1; 
    z=`expr $i + $z`; 
    echo "$z"; 
done 
echo "$z"; 

La dernière instruction sorties toujours "0". Pourquoi?

+0

Vous pouvez utiliser 'z = $ ((z + i))' ou '((z + = i))' pour appeler 'expr' –

Répondre

5
+0

alors comment puis-je obtenir la dernière valeur dans z? –

+4

Avez-vous lu? –

+0

non: P Désolé –

0

Je ne sais pas pourquoi cela est arrivé, mais le problème est causé par le tuyau.

Si vous le faites comme ça

#!/bin/bash                               
    z=0; 
    for f in `find $1 -name "*.txt"` 
    do 
    i=1; 
    z=`expr $i + $z`; 
    echo "$z"; 
    done 
    echo "$z"; 

alors $ z ne sera pas nul.

1

La façon simple de traduire

find ... | while read ...; done 

à une forme sans tuyaux utilise process substitution:

while read ...; done < <(find ...) 

Lisibilité souffre un peu.