Я хотел бы сделать z глобальной переменной в следующем коде:
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".Почему?
Трубы начинают новую подоболочку.
Простой способ перевода
find ... | while read ...; done
для формы без труб используется процесс замены :
while read ...; done < <(find ...)
Читаемость несколько страдает.
Я не знаю, почему это произошло, но проблема вызвана трубой.
Если вы делаете это так
#!/bin/bash z=0; for f in `find $1 -name "*.txt"` do i=1; z=`expr $i + $z`; echo "$z"; done echo "$z";
тогда $ z не будет нулем.