【发布时间】:2014-03-05 02:57:30
【问题描述】:
ksh 有一个非常有趣的结构来做到这一点,在这个答案中有详细说明:https://stackoverflow.com/a/11172617/636849
从 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等价物。 -
mapfile -t foo_output <(foo)- 这是一个进程替换 -foo在一个全新的进程中运行,我认为这不是你想要的。请参阅我的答案的附录。 -
我不熟悉
mapfile,但由于它似乎读取其标准输入而不是文件,因此您可能必须编写< <(cmd)而不仅仅是<(cmd),如@987654331 @ 最终被替换为/dev/fd/63之类的东西(尝试echo <(echo)进行检查)。至少它似乎没有那样挂。
标签: bash variable-assignment subshell