
if [ ! $var = " *.awk " ] ; then
echo "$var contains awk file"
fi
isso é o que eu tenho, mas quando eu executo e coloco um nome de arquivo sem .awk
ele ainda diz que contém arquivo awk
Responder1
Em bash
, você pode realizar um teste de globbing usando
if [[ $var == *.awk ]]; then
echo '$var ends with ".awk"'
else
echo '$var does not end with ".awk"'
fi
Observe os colchetes duplos e os sinais de igual.
bash
também suporta a maneira padrão de fazer esses testes:
case $var in
*.awk) echo '$var ends with ".awk"' ;;
*) echo '$var does not end with ".awk"' ;;
esac
Observe que em ambos os casos, o padrão *.awk
não pode ser citado. Citar o padrão tornaria uma comparação de strings, não uma correspondência de padrão global.
A razão pela qual seu teste parece sempre ter sucesso é dupla:
- Você testa a string literal
*.awk
(incluindo um espaço em cada lado) que presumivelmente nunca corresponderá, e - Você nega o teste com
!
.