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