これが気になります:
if [ "$first_arg" == "major" ] || [ "$first_arg" == "minor" ]; then
exit 1;
fi
これと同じ:
if [ "$first_arg" == "major" || "$first_arg" == "minor" ]; then
exit 1;
fi
答え1
彼らは違う。実際、[ "$first_arg" == "major" || "$first_arg" == "minor" ]
有効な表現でもありません。
これは[
、同等のコマンドであり、相互コマンドレベルで実行される代替コマンドをtest
使用できないためです。||
歴史的に正しい選択肢は次のように考えることができます-o
が、これで、POSIXによって廃止されたとマークされました。1.書き直すことをお勧めします
test "$1" -o "$2"
入力する
test "$1" || test "$2"
test
設定に加えて、正確には許可されていませんが、許可する[
「最新の」テストコマンドがあります。[[
-o
||
したがって、これらはすべて有効で同じです。
テスト
[[
:if [[ $first_arg == major || $first_arg == minor ]]; then exit 1; fi
2つの
[[
テスト:if [[ $first_arg == major ]] || [[ $first_arg == minor ]]; then exit 1; fi
2つの
[
テスト(標準と同じ):if [ "$first_arg" = major ] || [ "$first_arg" = minor ]; then exit 1; fi
$first_arg
[[
単語の区切りやパス名の拡張がないため、内部に二重引用符は必要ありません。[
ただし、引用符は必ず使用してください。引用符minor
も意味がありませんmajor
。ここだけでなく、一緒にもtest
一緒にも[
同じです。その理由は単純な文字列だからです。
1. アプリケーションの使い方を確認してください。
答え2
両方の表現が無効であるため、準同等性があります;-)
これは非標準演算子でのみ機能します==
。[[
通常:test
組み込み関数を使用するときは、単純な式のみを使用することをお勧めします。これは、パラメータ拡張が適用されると、より大きな式が予測不能な結果をもたらす可能性があるためです。
test
すでにシェルに組み込まれているのでおおよそ。 35年が経過すると、より簡単なtest
コマンドを呼び出してシェルレベルで組み合わせることはもはやパフォーマンスの問題ではありません。