Busybox ash bug - 在while循环中无法连接字符串?

时间:2015-04-21 23:49:59

标签: busybox ash

使用Busybox ash编程时,以下程序中的str将按预期在每个while循环中更改,但在while循环后,str再次变为空。 /tmp/term_mon_ttys是一个测试文件。

#!/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循环之后,str变为0 1 2 3 4

有人注意到这个问题吗?

1 个答案:

答案 0 :(得分:1)

不是灰烬问题。管道创建一个子shell,因此while循环中的$ str与外部循环不同。

这在贝壳中经常出现。您可以在此处阅读更多内容:Bash Script: While-Loop Subshell Dilemma