Chr*_*uma 3 variables bash loops
好吧,所以我试图解析一个文件,在列中输出我需要的行,我不能让这个while循环工作,我真的很难过.
有趣的是,用for循环做几乎完全相同的事情确实有效.有人可以解释一下这里发生了什么吗?
这个...
e=""
for f in 1 2 3
do
echo $f
e="$e.$f"
done
echo $e
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
3
.1.2.3
Run Code Online (Sandbox Code Playgroud)
但是这个...
e=""
echo "1
2
3" | while read f
do
echo $f
e="$e.$f"
done
echo $e
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
3
Run Code Online (Sandbox Code Playgroud)
显然,$f当它们到达时,两个循环都有1,2或3个e="$e.$f",所以第二个循环不起作用的是什么?
我不能告诉你有多少次我不得不从某人的代码中提取这个错误.
管道基本上会产生分叉过程.e在forked进程中设置,但是当它终止时(在wile循环结束时),父进程不知道e已经改变.简而言之,永远不要在涉及管道的命令中设置变量.管道完成后不会设置.更短......如果可以避免,不要使用管道.
e=''
while read f
do
echo $f
e="$e.$f"
done << EOF
1
2
3
EOF
echo $e
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |