web-dev-qa-db-ja.com

Linuxシェルスクリプト-ワイルドカードを使用した文字列の比較

文字列がシェルスクリプト(#!bin/sh)の別の文字列の一部であるかどうかを確認しようとしています。

私が今持っているコードは:

#!/bin/sh
#Test scriptje to test string comparison!

testFoo () {
        t1=$1
        t2=$2
        echo "t1: $t1 t2: $t2"
        if [ $t1 == "*$t2*" ]; then
                echo "$t1 and $t2 are equal"
        fi
}

testFoo "bla1" "bla"

私が探している結果は、「bla」が「bla1」にいつ存在するかを知りたいということです。

よろしくお願いします

更新:ここに記載されているように両方の「含む」機能を試しました: Unix Shellスクリプトで文字列に別の文字列が含まれているかどうかをどのように確認しますか?

Stringの構文と同様に、bash に含まれる文字列

ただし、通常のシェルスクリプト(bin/sh)とは互換性がないようです...

助けて?

17
AlexT82

Bashで書くことができます(アスタリスクは外側引用符であることに注意してください)

    if [[ $t1 == *"$t2"* ]]; then
            echo "$t1 and $t2 are equal"
    fi

/ bin/shの場合、=演算子は、パターンマッチングではなく、等価性のみを目的としています。ただし、caseを使用できます

case "$t1" in
    *"$t2"*) echo t1 contains t2 ;;
    *) echo t1 does not contain t2 ;;
esac

特にLinuxをターゲットにしている場合、/ bin/bashが存在すると仮定します。

46
glenn jackman