Seu exemplo funciona bem. bash
não tem problema em corresponder a uma string que contém novas linhas incorporadas.
Com um padrão como *$'run_botch\n'*
, ele pode até corresponder à nova linha após a string run_botch
.
Eu tenho isso:
declare_result=$(declare -f cd);
que produz este verbatim:
cd ()
{
prev_cd "$@";
echo "botch cd hook invoked.";
run_botch
}
como posso verificar se $ declare_result corresponde a "run_botch"?
é tão simples como:
if [[ "$declare_result" == *"run_botch"* ]];
se isso não funcionar para sequências de várias linhas? Essa é minha principal preocupação é que não funcionará para strings separadas por novas linhas.
Seu exemplo funciona bem. bash
não tem problema em corresponder a uma string que contém novas linhas incorporadas.
Com um padrão como *$'run_botch\n'*
, ele pode até corresponder à nova linha após a string run_botch
.
Sim, funcionará corretamente.
a=$(declare -f cd);
e
b='cd ()
{
prev_cd "$@";
echo "botch cd hook invoked.";
run_botch
}'
combina corretamente:
[[ "$a" == "$b" ]] && echo match
Não há necessidade de asteriscos.
Uma advertência, porém, a expansão de comando de a=$(declare -f cd)
está removendo todo e qualquer espaço em branco (com um IFS padrão). É por isso que a variável b
termina com:
}'
e não com
}
'
que fará a correspondência (exata) falhar.
Se você quiser testar se alguma string existe dentro da variável a
, você precisa dos asteriscos:
[[ $a == *run_botch* ]] && echo match
As aspas são opcionais (no lado esquerdo), no lado direito aspas podem alterar a interpretação da string.
Tags bash shell shell-script