Bash での一重と二重の角括弧の違い
このチュートリアルでは、Bash に含まれる単一の角括弧と二重の角括弧とその違いについて説明します。
Bash における一重角括弧 [ ]
について
単一の角括弧 [
は、Bash シェルの test
コマンドの別名です。test
コマンドは、すべての POSIX シェルの標準ユーティリティです。]
は [
の最後の引数です。
以下の 2つのスクリプトは、[
と test
コマンドが類似していることを示しています。最初のスクリプトは、一重の角括弧を使用して、変数 $y
の値が変数 $x
の値より大きいかどうかを確認し、test
コマンドの評価から返された結果に応じて出力を出力します。
この場合、$y
変数の値は $x
変数の値よりも大きくなります。
#!/bin/bash
x=2
y=3
if [ $y -gt $x ]
then
echo "$y is greater than $x"
else
echo "$x is greater than $y"
fi
スクリプトを実行すると、次のメッセージが標準出力に出力されます。
3 is greater than 2
このスクリプトは、一重の角括弧の代わりに test
コマンドを使用します。スクリプトは、$y
変数の値が $x
変数の値より大きいかどうかを確認します。
test
が true を返す場合、スクリプトは最初の echo
コマンドを実行し、test
が false を返す場合、else
セクションの echo
コマンドを実行します。
この場合、$y
変数の値は $x
変数 2 よりも大きくなります。2。スクリプトは最初の echo
コマンドを実行します。
#!/bin/bash
x=2
y=3
if test $y -gt $x
then
echo "$y is greater than $x"
else
echo "$x is greater than $y"
fi
スクリプトは、次の出力を標準出力に出力します。
3 is greater than 2
Bash の二重角括弧 [[ ]]
について
二重角括弧 [[]]
は、ksh88
から採用された test
コマンドを拡張したもので、より汎用性があります。二重角括弧は、パターンマッチやパラメータの展開に使用でき、単語の分割はできません。
二重角括弧を使うことで,Bash スクリプトの論理的な誤りを避けることができます.二重角括弧の中では、&&
、||
、<
、>
の各演算子が動作しますが、test
コマンドではエラーが発生します。
以下のスクリプトでは、算術評価に二重角かっこを使用しています。二重角かっこは、$x
変数の値が $y
変数の値と等しいかどうかをテストします。
テストは true を返し、スクリプトの最初の echo
コマンドを実行します。
#!/bin/bash
x=10
y=10
if [[ $x -eq $y ]]
then
echo "\$x is equal to \$y"
else
echo "\$x is not equal to \$y"
fi
スクリプトを実行すると、標準端末に次の出力が生成されます。
$x is equal to $y
Bash における一角括弧と二角括弧の違い
test
コマンドは、標準の POSIX シェルに組み込まれている Bash ユーティリティですが、二重角かっこはコマンドではありません。二重角かっこは、キーワードとして使用される ksh88
を応用した Bash の拡張機能です。
二重角かっこは、test
コマンドと比較してより多くの機能をサポートします。test
コマンドとは異なり、パターンマッチングとパラメータ拡張をサポートし、単語分割を許可しません。