
私はさまざまなタスクを実行する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* Digital
。Digital 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
。