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