
if [ ! $var = " *.awk " ] ; then
echo "$var contains awk file"
fi
esto es lo que tengo pero cuando lo ejecuto y pongo un nombre de archivo sin .awk
él todavía dice contiene archivo awk
Respuesta1
En bash
, puedes realizar una prueba global usando
if [[ $var == *.awk ]]; then
echo '$var ends with ".awk"'
else
echo '$var does not end with ".awk"'
fi
Tenga en cuenta los corchetes dobles y los signos de igual.
bash
también admite la forma estándar de realizar dichas pruebas:
case $var in
*.awk) echo '$var ends with ".awk"' ;;
*) echo '$var does not end with ".awk"' ;;
esac
Tenga en cuenta que en ambos casos el patrón *.awk
no puede citarse. Citar el patrón lo convertiría en una comparación de cadenas, no en una coincidencia de patrón global.
La razón por la que su prueba parece tener siempre éxito es doble:
- Prueba con la cadena literal
*.awk
(incluido un espacio a cada lado) que presumiblemente nunca coincidirá, y - Niegas la prueba con
!
.