シェルで特定の文字列を含むか判定する方法

シェルで特定の文字列を含むか判定する方法

シェルスクリプトで特定の文字列を含むかを判定する方法はいくつかあります。
主に使われる方法は、grep コマンドや条件式 if を使う方法です。
以下にいくつかの例を紹介します。

1. grep コマンドを使用する方法

grep コマンドは特定の文字列が含まれているかを確認するために非常に便利です。
以下の例では、grep を使って文字列が含まれているかどうかを確認し、その結果に基づいて処理を行います。

#!/bin/bash

string="Hello, World!"
substring="World"

if echo "$string" | grep -q "$substring"; then
  echo "文字列は含まれています。"
else
  echo "文字列は含まれていません。"
fi
  • grep -q オプションを使用することで、マッチする結果があっても表示を抑制し、結果のステータスコードだけを返すようにします。

grep がマッチを見つけた場合はステータスコード 0 が返され、見つからない場合は 1 が返されます。

2. *〜*演算子を使う方法

*〜*を使った条件式を使用すると、文字列が含まれているかどうかを確認できます。
これは、シェルスクリプトの標準的な構文で、bash などのシェルでよく使用されます。

#!/bin/bash

string="Hello, World!"
substring="World"

if [[ "$string" == *"$substring"* ]]; then
  echo "文字列は含まれています。"
else
  echo "文字列は含まれていません。"
fi
  • * はワイルドカードで、文字列の前後に付けることで部分一致を確認できます。

この方法はbashやzshで動作しますが、他のシェルでは動作しない場合があります。

3. case 文を使用する方法

case 文を使用しても、文字列の部分一致を確認することができます。

#!/bin/bash

string="Hello, World!"
substring="World"

case "$string" in
  *"$substring"*)
    echo "文字列は含まれています。"
    ;;
  *)
    echo "文字列は含まれていません。"
    ;;
esac
  • case 文もワイルドカード * を使用して部分一致を確認します。

この方法は、特定のパターンにマッチするかどうかを判定するために便利です。

4. awk を使用する方法

awk コマンドを使って文字列の包含を確認することもできます。

#!/bin/bash

string="Hello, World!"
substring="World"

echo "$string" | awk -v s="$substring" 'index($0, s) {found=1} END {exit !found}'
if [ $? -eq 0 ]; then
  echo "文字列は含まれています。"
else
  echo "文字列は含まれていません。"
fi
  • awk の index 関数を使って、特定の文字列が含まれているかを確認しています。

awk の中で条件が真であればフラグを立て、最後にそのフラグに基づいて終了コードを返します。

5. expr を使用する方法

expr コマンドも利用できますが、現代のシェルスクリプトではあまり使用されません。

#!/bin/bash

string="Hello, World!"
substring="World"

if expr "$string" : ".*$substring" > /dev/null; then
  echo "文字列は含まれています。"
else
  echo "文字列は含まれていません。"
fi
  • expr の : 演算子を使用して部分一致を確認します。

expr は古いツールであり、現在ではあまり推奨されていません。

まとめ

シェルスクリプトで特定の文字列を含むかどうかを確認する方法はいくつかありますが、grep や *〜*を使う方法が最も一般的で便利です。
grep はどのシェルでも動作するため、汎用性が高く、*〜*は bash や zsh などの拡張されたシェルでシンプルに書けるため、使い勝手が良いです。

どの方法を選ぶかは、使用しているシェルやスクリプトの要件に応じて決めると良いでしょう。