想知道here-string(here-document)和pipe的正确用法。
例如,
a='a,b,c,d'
echo $a | IFS=',' read -ra x
IFS=',' read -ra x <<< $a
两种方法都有效。那么这两个功能有什么区别?
我对“阅读”的另一个问题是:
IFS=',' read x1 x2 x3 x4 <<< $a
不起作用,x1的值为“a b c d”,而x2,x3,x4没有值
但是如果:
IFS=',' read x1 x2 x3 x4 <<< "$a"
我可以得到x1 = a,x2 = b,x3 = c,x4 = d一切都还好!
任何人都能解释一下吗?
提前致谢
答案 0 :(得分:9)
在管道中,创建了两个新进程:一个用于执行echo
命令的shell,另一个用于执行read
命令的shell。由于两个子shell都在完成后退出,因此管道完成后x
变量不可用。 (在bash
4中,引入了lastpipe
选项以允许管道中的最后一个命令在当前shell中执行,而不是子shell,从而缓解了此类管道的问题。)
在第二个示例中,here字符串(此处文档的特殊类型由单行组成)不需要额外的进程,因此x
的值实际上是在当前shell中设置的,使其可在稍后的脚本/会话中使用。