使用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
。
有人注意到这个问题吗?
答案 0 :(得分:1)
不是灰烬问题。管道创建一个子shell,因此while循环中的$ str与外部循环不同。
这在贝壳中经常出现。您可以在此处阅读更多内容:Bash Script: While-Loop Subshell Dilemma