一个有趣的小 bash 预告片,我很想解释一下。
我拥有的两个循环结构虽然是相同的,但显然不是。似乎在进行while
循环时管道与重定向存在一些差异。
输入文件
给定使用此内容调用的示例文件values.txt
:
1
2
3
4
5
6
管道到 while
$ value=0; cat values.txt | while read var; do value=`expr $value + $var`; done
$ echo $value
0
重定向到 while
$ value=0; while read var; do value=`expr $value + $var`; done < values.txt
$ echo $value
21
简而言之,显然在第一个版本中,while
循环的每次迭代都有效地执行,()
而在第二个版本中,每次迭代都以{}
()
问题不在于和之间的区别{}
。我的问题是是什么导致while
了循环行为的这种差异?
是否有合乎逻辑的原因他们应该表现不同,或者这只是早期做出的错误选择,出于兼容性原因无法更改?是否有可能通过管道while
获取{}
行为?