stderr
二重括弧コンストラクタをリダイレクトできるようにしたいです。たとえば、
a=$(($var/$var2))
いくつかのエラーメッセージが表示されます。もしそうなら、$var2 = 0
ユーザーはこれを見ないことを願っています。
除算する前に単にゼロを確認できることを知っていますが、単に好奇心から、そして他の状況で役に立つかもしれないので、このリダイレクトを実行する方法があるかどうか疑問に思いました。
私は努力しました:
a=$(($var/$var2)) 2> /dev/null
うまくいかないもの
a=$(($var/$var2 2> /dev/null ))
構文エラーが発生します。
答え1
この動作の理由は、計算が外部コマンドではなくシェル自体で実行されるためです。シェルのSTDERRをリダイレクトするには、そのリダイレクトでシェルを起動する必要がありますが、これによりすべてのエラーが失われます。bash 2> /dev/null
あるいは、中かっこグループを使用する方がより適切な解決策だと思います。
{ a=$(( val1 / val2 } )); } 2> /dev/null
答え2
V=`expr "$var" / "$var2" 2>/dev/null`
しかし、分割が失敗した場合、結果は空になります。