我知道子shell的调用符号输出被抑制了:
a=$(echo 123)
echo a:$a
按预期输出:
a:123
但是为什么stnr并没有被压缩,因为它在子壳中?
a=$(>&2 echo 123)
预期产出:
(无)
实际输出:
123
这是一个测试,其中stderr应该重定向到stdout并被捕获到变量a
:
a=$(>&2 echo 123 2>&1)
echo a:$a
预期产出:
a:123
实际输出:
123
a:
答案 0 :(得分:1)
输出没有被抑制;它被捕获。这是普通子shell (echo foo)
和命令替换 a=$(echo foo)
之间的区别。此外,命令替换不捕获标准错误,仅捕获标准输出。
答案 1 :(得分:1)
这是一个测试,其中stderr应该重定向到stdout并被捕获到变量a:
a=$(>&2 echo 123 2>&1)
没有。
>&2
- 现在,stdout指向stderr。2>&1
- 现在,stderr指向stderr。 如果您希望stderr指向stdout,则无法首先重定向stdout。删除>&2