文字列にダッシュまたはグレーの部分文字列が含まれているかどうかを確認するには?

文字列にダッシュまたはグレーの部分文字列が含まれているかどうかを確認するには?

これが私が試していることです:

#!/bin/sh
contains() {
    if $(echo $1 | grep -c $2) ; then
        echo "0" # contains
    else
        echo "1" # not contains
    fi
}

myString=$1
mySubsting=$2

contains $myString '$mySubsting'

実行例は次のとおりです。

# sh ./myScript abcdef bc
./myTest: line 3: 0: command not found
1

編集する:

元の質問:Bourne Shellで文字列に部分文字列が含まれているかどうかを確認する方法は?

これが私が試していることです:

  #!/bin/sh
  if echo $1 | grep -q $2
  then
    echo "0"
  else
    echo "1"
  fi

実行例は次のとおりです。

$ sh ./myTest "$(systemctl status ntp)" "Active: active"
grep: active: No such file or directory
1

文字列に他の文字列が含まれているかどうかを正しく確認するには?

ベストアンサー1

関数を含む移植可能な(dash、bash、kshなど)スクリプト:

#!/bin/sh

contains() {  if    [ "$1" ] &&            # Is there a source string.
                    [ "$2" ] &&            # Is there a substring.
                    [ -z "${1##*"$2"*}" ]; # Test substring in source.
              then  echo 0;                # Print a "0" for a match.
              else  echo 1;                # Print a "1" if no match.
              fi;
            }

contains "$1" "$2"

ここで、0 は「含む」(真値)を意味します。

これは次のようにテストされます。

 $ contains "test a simple line" simpl
 1

 $ contains "One sentence" "No more"
 0

おすすめ記事