提问人:PeopleMoutainPeopleSea 提问时间:2/18/2023 最后编辑:CyrusPeopleMoutainPeopleSea 更新时间:4/24/2023 访问量:87
为什么要 bash read 命令创建循环局部变量?[复制]
why bash read command create a loop-local variable? [duplicate]
问:
我写了以下 bash 脚本。read 命令创建变量 。
如果则中断循环。var
$var==5
seq 10 | while read -r var
do
echo "read: $var"
if [[ $var == 5 ]]; then
echo "break loop: $var"
break
fi
done
echo "after loop: $var"
这是输出
read: 1
read: 2
read: 3
read: 4
read: 5
break loop: 5
after loop:
我的问题是:为什么在循环之后,是空的?$var
答:
2赞
Joseph Sible-Reinstate Monica
2/18/2023
#1
该变量不是循环局部的,与此处的循环相关的所有内容都只是红鲱鱼。您看到的行为是因为管道启动了子壳。如果摆脱管道并改为运行以下代码:read
while read -r var
do
echo "read: $var"
if [[ $var == 5 ]]; then
echo "break loop: $var"
break
fi
done < <(seq 10)
echo "after loop: $var"
然后它将打印以下内容:
read: 1
read: 2
read: 3
read: 4
read: 5
break loop: 5
after loop: 5
评论
1赞
Philippe
2/18/2023
另一种选择是运行shopt -s lastpipe
评论