有人可以解释一下mapfile输入重定向的这种语法吗?
mapfile -t array < <(./inner.sh)
(来自this StackOverflow answer by gniourf_gniourf)
据我所知,第一个“&lt;”是从右侧的输出中获取输入。但是什么是&lt;(...)语法?为什么第二个“&lt;”需要?
答案 0 :(得分:14)
linked example看起来像这样的原因:
wc <(cat /usr/share/dict/linux.words)
mapfile answer看起来像这样:
mapfile -t array < <(./inner.sh)
是因为wc
和mapfile
命令的不同以及如何将替换过程赋予命令。
正如anishsane所说,<(command)
的扩展是一个文件名,可以在任何可以使用文件名的地方使用。
wc
将文件名作为参数,因此可以直接用作参数。
mapfile
从标准输入读取,以便从您使用的特定文件中读取文件</path/to/somefile
中的标准输入,但正如我刚才所说,<(command)
的扩展是一个文件名,以便您可以在输入重定向中使用它。
但是,您不能直接连接两个位(使用文件名/路径的方式),因为<<
也是一个有效的shell构造(这里是文档),这对shell来说是不明确的。因此,为了避免这种情况,您需要将两个<
字符分隔开来,最后得到< <(command)
(类似于< file
,这完全合法)。