「[」で「-a」または「-o」演算子を使用しないでください。

「[」で「-a」または「-o」演算子を使用しないでください。

スティーブン・チャジェラス書いた:

いくつかのルール。

  • 常に参照変数
  • -aor演算子を使用しないでください-o(複数の[コマンドと&&and||シェル演算子を使用してください)。

[POSIXシェルを使用して安定性を向上させます。

なぜ「-aOR-o演算子を使用しないでください」?

[「複数のコマンドと&&シェル||演算子を使用して」これをどのように実行できますか?

答え1

なぜ「-aOR-o演算子を使用しないでください」?

なぜならあいまいな可能性があるため、POSIXと互換性がありません。:

-a および -o デフォルトのバイナリと「(」および「)」演算子を指定する XSI 拡張は、廃止とマークされています。 (これを使用する多くの式は、評価される特定の式に従って構文によってあいまいに定義されます。)これらの式を使用するスクリプトは、以下の形式に変換する必要があります。多くの実装はこれらの役に立たない形式をサポートし続けますが、スクリプトはユーザー提供の入力を処理するときに非常に注意する必要があります。これは、これらの基本と演算子と混同される可能性があるためです。アプリケーション開発者がスクリプトへの入力を生成するすべての状況を知らない限り、次のように呼び出します。

test "$1" -a "$2"

次のように書く必要があります。

test "$1" && test "$2"

[「複数のコマンドと&&シェル||演算子を使用して」これをどのように実行できますか?

たとえば、次の演算子を使用して複数のテストを実行して接続します。

[ 0 -eq 0 -a \( 0 -eq 1 -o 1 -eq 1 \) ]

次のように書き換えることができます。

[ 0 -eq 0 ] && ([ 0 -eq 1 ] || [ 1 -eq 1 ])

またはより良い:

[ 0 -eq 0 ] && { [ 0 -eq 1 ] || [ 1 -eq 1 ]; }

関連情報