重定向双括号构造的 stderr

重定向双括号构造的 stderr

我希望能够重定向stderr双括号构造的 。例如:

a=$(($var/$var2))

会输出一些错误消息,如果$var2 = 0,我不希望用户看到这一点。

我知道我可以在进行除法之前简单地检查零,但我想知道是否有办法进行此重定向,出于好奇,并且因为它在其他情况下可能会很有用。

我已经尝试过:

a=$(($var/$var2)) 2> /dev/null

哪个不起作用并且

a=$(($var/$var2 2> /dev/null ))

这给出了语法错误。

答案1

造成此行为的原因是计算是由 shell 本身完成的,而不是由外部命令完成的。要重定向 shell 的 STDERR,您必须使用该重定向来启动它,但随后您会丢失所有错误。bash 2> /dev/null

或者你使用大括号组,我认为这是一个更合适的解决方案:

{ a=$(( val1 / val2 } )); } 2> /dev/null

答案2

V=`expr "$var" / "$var2" 2>/dev/null`

但如果除法失败,结果为空。

相关内容