いくつかのルール
- 常に変数を引用する
-a
or-o
演算子を使用しないでください(いくつかの[
コマンドと&&
andおよび||
shell演算子を使用します)作る
[
POSIXシェルで信頼性の高いです。
なぜ「-a
または-o
演算子を使用しない」のですか?
「いくつかの[
コマンドと&&
andおよび||
shell演算子を使用する」にはどうすればよいですか?
いくつかのルール
- 常に変数を引用する
-a
or-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"))
?必要ありません((..))
か?