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)
是因为wc
和mapfile
命令的不同,以及需要如何将替换过程交给命令。
正如 anishsane 所说,<(command)
的扩展是一个文件名,可以在任何可以使用文件名的地方使用。
wc
将文件名作为参数,因此可以直接用作参数。
mapfile
从标准输入中读取以便让它从您使用的特定文件中读取,您可以从文件 </path/to/somefile
中重定向标准输入但是正如我刚才所说 [=14= 的扩展] 是一个文件名,因此您可以在输入重定向中使用它。
但是,您不能直接连接这两个位(使用文件 name/path 的方式),因为 <<
也是一个有效的 shell 构造(此处文档)这对于 shell 来说是模棱两可的。因此,为了避免您需要 space 出两个 <
字符并以 < <(command)
结尾(类似于完全合法的 < file
)。
谁能给我解释一下 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)
是因为wc
和mapfile
命令的不同,以及需要如何将替换过程交给命令。
正如 anishsane 所说,<(command)
的扩展是一个文件名,可以在任何可以使用文件名的地方使用。
wc
将文件名作为参数,因此可以直接用作参数。
mapfile
从标准输入中读取以便让它从您使用的特定文件中读取,您可以从文件 </path/to/somefile
中重定向标准输入但是正如我刚才所说 [=14= 的扩展] 是一个文件名,因此您可以在输入重定向中使用它。
但是,您不能直接连接这两个位(使用文件 name/path 的方式),因为 <<
也是一个有效的 shell 构造(此处文档)这对于 shell 来说是模棱两可的。因此,为了避免您需要 space 出两个 <
字符并以 < <(command)
结尾(类似于完全合法的 < file
)。