Les réponses déjà affichées sont certainement correct, mais il peut être intéressant de noter que l'expansion de temps en temps paramètre peut servir le même but avec peut-être une certaine flexibilité supplémentaire.
% p() { printf 'notvar = %b\n' "${notvar##"${string1}"}${string2}" ; }
% string1='some stuff about things\c'
% string2='some different stuff maybe'
% notvar="$string1" p
> 'some different stuff maybe'
% notvar="$string2" p
> 'some stuff about things'
Ok, donc ce qui précède n'est pas super utile comme il est, mais aussi considérer que vous pouvez utiliser les méthodes similaires pour les variables de test ici-documents, les affectations de variables en ligne si nécessaire (à un degré ...), ou même comme un moyen plus court (et plus rapide!) d'écrire votre première déclaration.
[ ! "${var##"string"}" ] && _MATCH || _NOMATCH
Ou encore ...
[ ${#var#*"${s=string}"} -lt ${#var} ] && _SUB_STRING_TEST=TRUE
Peut-être même ...
% p() { printf '%s is %s of %s' "$2" "${var_chk-not}" "$1"
> }<<HEREDOC
> ${in="${1##*"${2}"*}"}
> ${in:-
> ${in="${1##"${2}"}"}
> ${in:-${var_chk=all}
> ${var_chk=some}
> }
> HEREDOC
%
Vous pouvez utiliser '[[$ var ==" string "]]', qui est POSIX, mais optionnel (afaik). Ou vous utilisez '[" $ var "=" string "]'. Notez le '" "' autour de la variable dans l'édition à un seul crochet: c'est obligatoire dans le cas où '$ var' est vide –
La partie importante est les guillemets autour de' $ var' comme litb mentionné. Sans les guillemets, '[$ var =" valeur "]' devient '[=" valeur "]', ce qui rend le shell assez terrifiant. Vous verrez probablement une erreur comme _ "[: =: opérateur unaire attendu" _ lorsque vous rencontrez une variable vide sinon. –
Je comprends à propos de "$ var" vs $ var, mon problème était == vs = – LiraNuna