web-dev-qa-db-ja.com

シェルスクリプト変数で部分文字列を検索

紐があります

$VAR="I-UAT"; 

私のシェルスクリプトコードで。その文字列に"UAT"が存在するかどうかを確認する条件付きステートメントが必要です。

Trueまたはfalseのブール値を出力として取得するには、どのコマンドを使用する必要がありますか?またはそれをチェックする他の方法はありますか?

21
batty

どんなシェル? bashの使用:

if [[ "$VAR" =~ "UAT" ]]; then
    echo "matched"
else
    echo "didn't match"
fi
21
Andrew Clark

あなたはこの方法でそれを行うことができます:

case "$VAR" in
  *UAT*)
   # code when var has UAT
  ;;
esac
8
Diego Sevilla

探している文字列が事前にわかっている場合の古典的な方法は、caseステートメントです。

case "$VAR" in
*UAT*) : OK;;
*)     : Oops;;
esac

:コマンドの代わりに適切なコマンドを使用できます。これは、Bashだけでなく、BourneおよびKornシェルでも機能します。

5
found=`echo $VAR | grep -c UAT`

次に、$ foundがゼロ以外かどうかをテストします。

2
jman

bashスクリプトで使用できます

if [ "$VAR" != "${VAR/UAT/}" ]; then
  # UAT present in $VAR
fi
1
Neil

grepで試してください:

$ echo I\-UAT | grep UAT
$ echo $?
0
$ echo I\-UAT | grep UAX
$ echo $?
1

そうテスト

if [ $? -ne 0 ]; then
  # not found
else
  # found
fi
1
marcelog