Глобальная переменная в сценарии оболочки - PullRequest
4 голосов
/ 25 октября 2011

Я хотел бы сделать z глобальной переменной в следующем коде:

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

Последний оператор всегда выводит "0".Почему?

Ответы [ 3 ]

5 голосов
/ 25 октября 2011
1 голос
/ 25 октября 2011

Простой способ перевода

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

для формы без труб используется процесс замены :

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

Читаемость несколько страдает.

0 голосов
/ 25 октября 2011

Я не знаю, почему это произошло, но проблема вызвана трубой.

Если вы делаете это так

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

тогда $ z не будет нулем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...