bash 子 shell `sed` 输出如何放入主 shell 环境变量中

bash 子 shell `sed` 输出如何放入主 shell 环境变量中

如何将 bash 子 shellsed输出放入 main/root shell 环境变量中?

它会失败,

v=`echo NO |tee >(sed 's/^/&YES/' )`

真实情况如何解决呢?

答案1

它可以工作(Linux Mint 18.1,GNU bash,版本 4.3.48)。

Paul--) unset v
Paul--) v=`echo NO |tee >(sed 's/^/&YES/' )`
Paul--) declare -p v
declare -- v="NO
YESNO"

你期望它做什么?问题是您正在使用 >( .. ),一种进程替换语法。

tee 复制 NO 并将其通过 sed 传输。因此,tee 将原始数据输出NO\n到其标准输出,而 sed 作为单独的进程运行并发送到NOYES\n其标准输出。命令替换(在反引号中)将两者收集到v.

sed 在单独的进程中运行,过去曾出现过 bash 不等待其完成的问题。因此,此构造可能会出现竞争条件,特别是如果第二个过程需要一些时间。

相关内容