bash のマニュアル ページを見ると、[[
条件式が使用されていると書かれています。次に、条件式セクションを確認すると、test
(および[
) と同じ演算子がリストされています。
それで、 Bash の[
との違いは何だろうと思います。[[
ベストアンサー1
[[
は、bash のコマンドの改良版です[
。いくつかの機能強化が施されており、bash をターゲットとするスクリプトを作成する場合に適しています。私のお気に入りは次のとおりです。
これはシェルの構文上の特徴なので、シェル
[
にはない特別な動作があります。 は空の文字列や空白を含む文字列をより直感的に処理するため、変数を狂ったように引用符で囲む必要がなくなりました[[
。たとえば、次のように記述する[
必要があります。if [ -f "$file" ]
空の文字列やスペースを含むファイル名を正しく処理します。
[[
引用符は不要です。if [[ -f $file ]]
これは構文上の機能であるため、ブール値のテストに
&&
and演算子を使用し、文字列の比較に and 演算子を使用できます。これは通常のコマンドであり、、、、はコマンドライン引数として通常のコマンドに渡されないため、これを行うことはできません。||
<
>
[
&&
||
<
>
=~
正規表現のマッチングを行うための素晴らしい演算子[
があります。if [ "$answer" = y -o "$answer" = yes ]
これを次のよう
[[
に書くことができますif [[ $answer =~ ^y(es)?$ ]]
に保存されているキャプチャされたグループにアクセスすることもできます
BASH_REMATCH
。たとえば、${BASH_REMATCH[1]}
上で完全な「yes」を入力した場合、 は「es」になります。パターン マッチング、つまりグロブは無料で利用できます。yes の入力方法についてはそれほど厳格ではないかもしれません。ユーザーが y と何でも入力しても問題ないかもしれません。これでおしまいです:
if [[ $ANSWER = y* ]]
これは bash 拡張機能なので、sh 互換のスクリプトを作成する場合は を使用する必要があることに注意してください。二重括弧を使用する場合は、スクリプトに shebang 行[
があることを確認してください。#!/bin/bash