デュアルブラケットで構成された stderr リダイレクト

デュアルブラケットで構成された stderr リダイレクト

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`

しかし、分割が失敗した場合、結果は空になります。

関連情報