如何将 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 不等待其完成的问题。因此,此构造可能会出现竞争条件,特别是如果第二个过程需要一些时间。