2015-04-21 2 views
0

При программировании с зоной Busybox str в следующей программе будет изменен в каждом while петле, как и ожидалось, но после цикла str снова станет пустым. /tmp/term_mon_ttys является тестовым файлом.Ошибка Busybox ash - не может конкатрировать строки во время цикла?

#!/bin/ash 
cnt=0 
str= 
cat /tmp/term_mon_ttys | while read line; do 
    str="$str $cnt" 
    cnt=`expr $cnt + 1` 
done 
echo $str 

Однако, если изменение кода выше, чтобы

#!/bin/ash 
cnt=0 
str= 
while [ $cnt -lt 5 ]; do 
    str="$str $cnt" 
    cnt=`expr $cnt + 1` 
done 
echo $str 

затем после цикла while, то становится ул 0 1 2 3 4.

Кто-нибудь заметил эту проблему?

ответ

1

Не проблема с золой. Труба создает подоболочку, поэтому $ str внутри цикла while не совпадает с той, что находится снаружи.

Это регулярно появляется в снарядах. Вы можете узнать больше здесь: Bash Script: While-Loop Subshell Dilemma