いくつかのルール
- 常に変数を引用する
-aor-o演算子を使用しないでください(いくつかの[コマンドと&&andおよび||shell演算子を使用します)作る
[POSIXシェルで信頼性の高いです。
なぜ「-aまたは-o演算子を使用しない」のですか?
「いくつかの[コマンドと&&andおよび||shell演算子を使用する」にはどうすればよいですか?
いくつかのルール
- 常に変数を引用する
-aor-o演算子を使用しないでください(いくつかの[コマンドと&&andおよび||shell演算子を使用します)作る
[POSIXシェルで信頼性の高いです。
なぜ「-aまたは-o演算子を使用しない」のですか?
「いくつかの[コマンドと&&andおよび||shell演算子を使用する」にはどうすればよいですか?
回答:
なぜ「
-aまたは-o演算子を使用しない」のですか?
あいまいで、POSIXに準拠していない可能性があるためです。
-aおよび-oバイナリプライマリと '('および ')'演算子を指定するXSI拡張機能は廃止予定としてマークされています。(それらを使用する多くの式は、評価される特定の式によっては、文法によってあいまいに定義されます。)これらの式を使用するスクリプトは、以下に示す形式に変換する必要があります。多くの実装はこれらの陳腐化した形式をサポートし続けますが、これらおよび他のプライマリーと演算子と混同される可能性があるユーザー提供の入力を処理する場合、スクリプトは非常に注意する必要があります。アプリケーション開発者がスクリプトへの入力を生成するすべてのケースを知らない限り、呼び出しは次のようになります。
test "$1" -a "$2"次のように記述する必要があります:
test "$1" && test "$2"
「いくつかの
[コマンドと&&andおよび||shell演算子を使用する」にはどうすればよいですか?
複数のテストを実行し、前述の演算子を使用してそれらをチェーンすることによって。例えば:
[ 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 ]; }
()し、{}代替として。(2)最初のもの; (())は、算術展開に使用されます。ここでは、一連のテストの終了ステータスをテストするため、サブシェル()または現在のシェルでテストをグループ化します{}。
(and )演算子を使用する唯一の理由は、-aまたはを使用している場合-oです。後者は陳腐化しているため、前者も明らかに不要になっています。
(と)事業者は、グループコマンドということ?それらが時代遅れである場合、それらの代わりは何ですか?(2)はすべきtest "$1" -a "$2"で置き換えることtest "$1" && test "$2"によって、または((test "$1" && test "$2"))?必要ありません((..))か?