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

Busybox ash bug - cannot concat strings in while loop?

当使用 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

有人注意到这个问题吗?

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

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