Le risposte già postato sono certamente corretto, ma può valere la pena di notare che l'espansione di tanto in tanto parametro può servire allo stesso scopo con forse qualche ulteriore flessibilità.
% 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, quindi quanto sopra non è super-utile come è, ma considerano anche che è possibile utilizzare i metodi simili per le variabili di test nel qui-documenti, in linea assegnazioni di variabili, se necessario (ad un grado ...), o anche solo come un mezzo più breve (e più veloce!) di scrivere la tua prima affermazione.
[ ! "${var##"string"}" ] && _MATCH || _NOMATCH
O anche ...
[ ${#var#*"${s=string}"} -lt ${#var} ] && _SUB_STRING_TEST=TRUE
Forse anche ...
% 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
%
È possibile utilizzare '[[$ var ==" stringa "]]', che è POSIX, ma facoltativo (afaik). O usi '[" $ var "=" stringa "]'. Notare il '" "' attorno alla variabile nell'edizione single-bracket: è necessario nel caso in cui '$ var' sia vuoto –
La parte importante sono le virgolette intorno a' $ var' come menzionato in precedenza. Senza le virgolette, '[$ var =" value "]' diventa '[=" value "]' che confonde la shell in modo abbastanza orribile. Probabilmente vedrai un errore come _ "[: =: unario operatore previsto" _ quando incontrerai una variabile vuota altrimenti. –
Comprendo "$ var" rispetto a $ var, il mio problema era == vs. = – LiraNuna