Las respuestas ya anunciados son ciertamente correcto, pero puede valer la pena señalar que la expansión de vez en cuando parámetro puede servir al mismo propósito con tal algo de flexibilidad adicional.
% 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, así que lo anterior no es súper útil como es, sino también en cuenta que puede utilizar los métodos similares para las variables de prueba en los documentos internos, en línea asignaciones de variables si es necesario (en un grado ...), o incluso como un medio más corto (¡y más rápido!) de escribir tu primera declaración.
[ ! "${var##"string"}" ] && _MATCH || _NOMATCH
O incluso ...
[ ${#var#*"${s=string}"} -lt ${#var} ] && _SUB_STRING_TEST=TRUE
posible que incluso ...
% 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
%
Puede usar '[[$ var ==" cadena "]]', que es POSIX, pero opcional (afaik). O puede usar '[" $ var "=" string "]'. Tenga en cuenta el '" "' alrededor de la variable en la edición de un solo paréntesis: se requiere en caso de que '$ var' esté vacía –
La parte importante son las comillas de' $ var' mencionadas. Sin las comillas, '[$ var =" value "]' se convierte en '[=" value "]' lo que confunde al caparazón de forma horrenda. Probablemente verá un error como _ "[: =: operador unario esperado" _ cuando encuentre una variable vacía de lo contrario. –
Entiendo acerca de "$ var" frente a $ var, mi problema fue == vs. = – LiraNuna