Eu escrevi uma função bash básica para testar a ocorrência de um argumento de pesquisa de string em outra string. Executá-lo a partir da linha de comando fornece os resultados esperados. A execução do mesmo a partir de um script de shell falha. Alguém pode me mostrar os erros dos meus caminhos?
me@mylaptop $ line='someidentifier 123 another identifier 789 065 theend'
me@mylaptop $ sarg='+([0-9])+([ ])another identifier'
me@mylaptop $ type strstr
strstr is a function
strstr ()
{
[ "${1#*$2*}" = "$1" ] && return 1;
return 0
}
me@mylaptop $ strstr "$line" "$sarg" ; echo "$?"
0
me@mylaptop $
Meu roteiro:
me@mylaptop $ cat l.sh
#!/bin/bash
function strstr ()
{
[ "${1#*$2*}" = "$1" ] && return 1;
return 0
}
line='someidentifier 123 another identifier 789 065 theend'
sarg='+([0-9])+([ ])another identifier'
echo '==='"$line"'==='
echo '==='"$sarg"'==='
strstr "$line" "$sarg"
echo "$?"
me@mylaptop $ ./l.sh
===someidentifier 123 another identifier 789 065 theend===
===+([0-9])+([ ])another identifier===
1
me@mylaptop $
Você ativou a
extglob
opção shell em seu shell interativo, mas não em seu script:Observe que sua função pode ser simplificada em