我希望能够重定向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`
但如果除法失败,结果为空。