IFステートメントの複数の句を使用した正規表現の比較

IFステートメントの複数の句を使用した正規表現の比較

私はさまざまなタスクを実行するbashプログラムを書いています。問題を引き起こす可能性があるIFステートメントがあります。以下のスクリプトは正しいですか?

if [[ ! $description =~ "Design" ]] || [[ ! $description =~ "Digital" ]]; then

        echo 'Does not match Design or Digital'
else
        echo 'A match has been found'
fi

答え1

この問題の解決策を見つけました。 steeldriverを言及したように、構文的には正確ですが、節の演算子を修正しました。

#/bin/bash

description="Advert"

if [[ $description =~ "Design" ]] || [[ $description =~ "Digital" ]]; then

    echo 'Matches Design or Digital'
else
    echo 'Does not match'
fi

ご提案いただいた皆様に感謝します!

答え2

出力メッセージが元のテキストで正しい場合は、最初のエコーは次のようになりますDoes not match Design *and* DigitalDigital Designたとえば、文字列で一致が見つかりました。


=~で正規表現演算子を使用する場合、bash左側は引用符付き文字列でなければなりません。右側は通常引用符で囲む必要があります。

#/bin/bash

description='Advert'

if [[ "$description" =~ Design  ]] ||
   [[ "$description" =~ Digital ]]; then
    echo 'Matches Design or Digital'
else
    echo 'Does not match'
fi

それは問題ではありませんこれただし、次のような状況で発生します。

description='Advert'

if [[ "$description" =~ "Ad.*" ]]; then
    echo 'Matches "Ad.*"'
else
    echo 'Does not match'
fi

これで印刷されますDoes not match

関連情報