15

想知道here-string(here-document)和管道的正确用法是什么。

例如,

a='a,b,c,d'
echo $a | IFS=',' read -ra x
IFS=',' read -ra x <<< $a

两种方法都有效。那么这两种功能有什么区别呢?

我对“阅读”的另一个问题是:

IFS=',' read x1 x2 x3 x4 <<< $a

不起作用,x1的值为“abc d”,x2,x3,x4没有值

但如果:

IFS=',' read x1 x2 x3 x4 <<< "$a"

我可以得到 x1=a, x2=b, x3=c, x4=d 一切正常!

谁能解释一下?

提前致谢

4

1 回答 1

16

在管道中,创建了两个新进程:一个用于 shell 执行echo命令,一个用于 shell 执行read命令。由于两个子shell 在完成后都会退出,因此该x变量在管道完成后不可用。(在bash4 中,lastpipe引入了该选项以允许管道中的最后一个命令在当前 shell 中执行,而不是在子 shell 中执行,从而缓解了此类管道的问题)。

在第二个示例中,here 字符串(一种特殊类型的 here 文档,由单行组成)不需要额外的处理,因此x实际上在当前 shell 中设置了值,使其可以在以后使用脚本/会话。

于 2013-08-08T01:15:36.690 回答