web-dev-qa-db-fra.com

Script shell Linux - Comparaison de chaînes avec des caractères génériques

J'essaie de voir si une chaîne fait partie d'une autre chaîne dans le script Shell (#! Bin/sh).

Le code que j'ai maintenant est:

#!/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"

Le résultat que je recherche, c'est que je veux savoir quand "bla" existe dans "bla1".

Merci et salutations,

MISE À JOUR: J'ai essayé à la fois la fonction "contient" comme décrit ici: Comment savoir si une chaîne contient une autre chaîne dans les scripts Unix Shell?

Ainsi que la syntaxe dans la chaîne contient dans bash

Cependant, ils semblent ne pas être compatibles avec le script Shell normal (bin/sh) ...

Aidez-moi?

17
AlexT82

En bash, vous pouvez écrire (notez que les astérisques sont extérieur les guillemets)

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

Pour/bin/sh, l'opérateur = Sert uniquement à l'égalité et non à la correspondance de modèles. Vous pouvez cependant utiliser case

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

Si vous ciblez spécifiquement Linux, je suppose que/bin/bash est présent.

46
glenn jackman