Bashスクリプトで使用される条件文の3つの形式は何ですか?
ベストアンサー1
これBash マニュアルの関連部分条件付き評価に使用できる5つの構成がリストされています。これらの中でif
、case
および[[ .. ]]
コンストラクタはおそらく実際のコードで最も一般的に使用されますが、この(( .. ))
構文は複雑な計算やその他の数値演算を実行するスクリプトでよく使用されます。
しかし、bashから分岐する別の非常に一般的な形式は言及していません。つまり、段落評価でコマンドを実行することです。
grep -q needle haystack.txt && echo "Needle located!" || echo "No dice or needles.";
&&
と||
論理演算子はそれぞれ「and」と「or」です。
これは実際には次のとおりです。
if grep -q needle haystack.txt; then echo "yea"; else echo "nay"; fi;
しかし、別の方法で動作します。最初の形式では、条件付きロジックは実際にはコードの実際の明示的なターゲットの副作用であり、少なくとも表面的には論理演算子を評価します。この設定はCコードとJavaScriptコードでも一般的です。
これはショートカットを使って機能します。たとえば、式の一部はx && y || z
左から右に評価されます。論理and(x
in)の左側がx && y
falseと評価されている場合、この時点ですでにfalseであることがわかっているため、bash
その部分を評価する必要はありません。y
x && y
論理ORの場合、その逆も真です。true || z
つまり、z の結果が何であれ、常に真と評価されます。
したがってgrep
、結果がfalseの場合、式の対応する部分はtrueにはできないため、bash
最初にスキップできます。echo
それで2番目に進みますecho
。一方、grepがtrueの場合、echo
最初のエントリが実行されます(単語がエコーされます...)。これは、右の値に関係なく、式がまだtrueと評価されるためbash
に行われます。||
Bashが条件文を使用する方法を理解するには、コマンドラインでいくつかの実験を実行するのが最善です。注文する
echo $?;
エコーされます戻りコード以前の声明。これはエラーコードなので0
trueを表し、ゼロ以外の値はfalseを表します。最初は少し混乱していますが、慣れています。
だからあなたは次のことをすることができます
$ (( 1 + 2 == 3 )); echo $?
0
$ (( 1 + 2 == 4 )); echo $?
1
[[ .. ]]
そして、これらの基本コンポーネントを理解するために、構成に対して同様のテストを実行します。完了したら、if
プレゼンテーションに進みますcase
。
あなたの質問に対する回答は、あなたが質問している状況によって大きく変わることがあると思います。しかし、オプションをよく理解すると、彼らが何をしたいのかを理解するのに役立ちます。