Bash 语法映射文件输入重定向

Bash syntax mapfile input redirection

谁能给我解释一下 mapfile 输入重定向的语法?

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

(从 this Whosebug answer 到 gniourf_gniourf)

据我了解,第一个“<”是从其右侧的任何内容的输出中获取输入。但是 <( ... ) 语法是什么?为什么需要第二个“<”?

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

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

mapfile answer 看起来像这样:

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

是因为wcmapfile命令的不同,以及需要如何将替换过程交给命令。

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

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

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

但是,您不能直接连接这两个位(使用文件 name/path 的方式),因为 << 也是一个有效的 shell 构造(此处文档)这对于 shell 来说是模棱两可的。因此,为了避免您需要 space 出两个 < 字符并以 < <(command) 结尾(类似于完全合法的 < file)。