Bash の [ と [[ の違いは何ですか? [重複] 質問する

Bash の [ と [[ の違いは何ですか? [重複] 質問する

bash のマニュアル ページを見ると、[[条件式が使用されていると書かれています。次に、条件式セクションを確認すると、test(および[) と同じ演算子がリストされています。

それで、 Bash の[との違いは何だろうと思います。[[

ベストアンサー1

[[は、bash のコマンドの改良版です[。いくつかの機能強化が施されており、bash をターゲットとするスクリプトを作成する場合に適しています。私のお気に入りは次のとおりです。

  1. これはシェルの構文上の特徴なので、シェル[にはない特別な動作があります。 は空の文字列や空白を含む文字列をより直感的に処理するため、変数を狂ったように引用符で囲む必要がなくなりました[[。たとえば、次のように記述する[必要があります。

    if [ -f "$file" ]
    

    空の文字列やスペースを含むファイル名を正しく処理します。[[引用符は不要です。

    if [[ -f $file ]]
    
  2. これは構文上の機能であるため、ブール値のテストに&&and演算子を使用し、文字列の比較に and 演算子を使用できます。これは通常のコマンドであり、、、、はコマンドライン引数として通常のコマンドに渡されないため、これを行うことはできません。||<>[&&||<>

  3. =~正規表現のマッチングを行うための素晴らしい演算子[があります。

    if [ "$answer" = y -o "$answer" = yes ]
    

    これを次のよう[[に書くことができます

    if [[ $answer =~ ^y(es)?$ ]]
    

    に保存されているキャプチャされたグループにアクセスすることもできますBASH_REMATCH。たとえば、${BASH_REMATCH[1]}上で完全な「yes」を入力した場合、 は「es」になります。

  4. パターン マッチング、つまりグロブは無料で利用できます。yes の入力方法についてはそれほど厳格ではないかもしれません。ユーザーが y と何でも入力しても問題ないかもしれません。これでおしまいです:

    if [[ $ANSWER = y* ]]
    

これは bash 拡張機能なので、sh 互換のスクリプトを作成する場合は を使用する必要があることに注意してください。二重括弧を使用する場合は、スクリプトに shebang 行[があることを確認してください。#!/bin/bash

参照

おすすめ記事