ksh 有一个非常有趣的构造来实现这一点,在此答案中详细说明:https://dev59.com/NGgu5IYBdhLWcg3w2alm#11172617
自从Bash 4.0以来,就有了一个内置的 mapfile 命令,可以解决这个问题:http://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html
但奇怪的是,它似乎不能与进程替换一起使用:
foo () { echo ${BASH_SUBSHELL}; }
mapfile -t foo_output <(foo) # FAIL: hang forever here
subshell_depth=${foo_output[0]} # should be 0
但是在Bash v3.2中如何实现这一点?
mapfile
?据我所知,在任何版本中都没有bash
等效的命令。 - chepnermapfile -t foo_output <(foo)
- 这是一个进程替换 -foo
在一个全新的进程中运行,我认为这不是你想要的。请参阅我的答案附录。 - Digital Traumamapfile
,但是它似乎读取标准输入而不是文件,因此您可能需要编写< <(cmd)
而不是仅使用<(cmd)
,因为<(cmd)
最终会被替换为像/dev/fd/63
这样的内容(可以尝试echo <(echo)
进行检查)。至少这种方式似乎不会挂起。 - Alice M.