Bash语法mapfile输入重定向

时间:2015-04-16 04:04:37

标签: bash redirect input

有人可以解释一下mapfile输入重定向的这种语法吗?

mapfile -t array < <(./inner.sh)

(来自this StackOverflow answer by gniourf_gniourf)

据我所知,第一个“&lt;”是从右侧的输出中获取输入。但是什么是&lt;(...)语法?为什么第二个“&lt;”需要?

1 个答案:

答案 0 :(得分:14)

linked example看起来像这样的原因:

wc <(cat /usr/share/dict/linux.words)

mapfile answer看起来像这样:

mapfile -t array < <(./inner.sh)

是因为wcmapfile命令的不同以及如何将替换过程赋予命令。

正如anishsane所说,<(command)的扩展是一个文件名,可以在任何可以使用文件名的地方使用。

wc将文件名作为参数,因此可以直接用作参数。

mapfile从标准输入读取,以便从您使用的特定文件中读取文件</path/to/somefile中的标准输入,但正如我刚才所说,<(command)的扩展是一个文件名,以便您可以在输入重定向中使用它。

但是,您不能直接连接两个位(使用文件名/路径的方式),因为<<也是一个有效的shell构造(这里是文档),这对shell来说是不明确的。因此,为了避免这种情况,您需要将两个<字符分隔开来,最后得到< <(command)(类似于< file,这完全合法)。