Bashで単一の角かっこ「[」を使用して部分文字列を確認するには? [コピー]

Bashで単一の角かっこ「[」を使用して部分文字列を確認するには? [コピー]

入力パラメータに特定の部分文字列が含まれているかどうかを検出したいと思います。

次のスクリプトを試しました。

#1:

#!/bin/sh

if  [ $1 = *abc* ]
then
    echo contains abc
else
    echo not contains abc
fi

#2:

if  [ "$1" = "*abc*" ]
then
    echo contains abc
else
    echo not contains abc
fi

#サム:

if  [ "$1" = *"abc"* ]
then
    echo contains abc
else
    echo not contains abc
fi

#1〜#3はすべて機能しません。

ただし、以下は[[簡単に機能できます。

#4:

if  [[ $1 = *"abc"* ]]
then
    echo contains abc
else
    echo not contains abc
fi

#5:

if  [[ $1 = *abc* ]]
then
    echo contains abc
else
    echo not contains abc
fi

では、シングルも製作可能でしょうか[

1 - 2021年9月21日午前10時55分追加

私は非常に便利なスレッドを見つけました。

Bash 演算子[[ vs [ vs ( vs((?

ベストアンサー1

[[はい内蔵シェル。これは[実行可能ファイルであるより一般的なバージョンです/usr/bin(参照:ドキュメントとmanページtest詳細は)。

[携帯性に優れ、汎用性の高いもの[[が一般的に使用しなければならないバリエーションです。

if  [[ $1 == *"abc"* ]]; then
    echo "substring present"
else
    echo "substring not present"
fi

部分文字列をテストするもう一つの良い方法は、正規表現演算子を使用することです。

if [[ "$1" =~ .*"abc".* ]]; then
    echo "contains"
else
    echo "doesn't contain"
fi

次の式=~正規表現ワイルドカードだけではありません。


部分文字列を確認するもう1つの方法は、次を使用することですcase

case $1 in
    *"abs"*)
        echo "substring present"
        ;;
    *)
        echo "substring not present"
        ;;
esac

grepまたは、CPHが彼の投稿で説明されているように使用できます。しかし、必ず使用してください。ここ - ドキュメント:

if grep -q "abc" <<< "$STR"; then
    echo "substring present"
else
    echo "substring not present"
fi

おすすめ記事