我可以在FreeBSD,GNU/Linux和Solaris下使用各种shell复制问题.它让我头疼了一个多小时,所以我决定在这里发布这个问题.
由于管道,read
它在自己的子壳中执行.
echo foo | while read a; do echo $a; done
会做你期望的.
替代方案:
echo foo | (read a ; echo $a)
编辑:
如果在子shell外需要$ a,则必须反转命令:
read a < <(echo foo); echo $a
这样,读取在当前进程中执行