
if [ ! $var = " *.awk " ] ; then
echo "$var contains awk file"
fi
это то, что у меня есть, но когда я запускаю его и ввожу имя файла без .awk
него, все равно пишет, что содержит файл awk
решение1
В bash
, вы можете выполнить тест глобализации, используя
if [[ $var == *.awk ]]; then
echo '$var ends with ".awk"'
else
echo '$var does not end with ".awk"'
fi
Обратите внимание на двойные квадратные скобки и знаки равенства.
bash
также поддерживает стандартный способ проведения таких тестов:
case $var in
*.awk) echo '$var ends with ".awk"' ;;
*) echo '$var does not end with ".awk"' ;;
esac
Обратите внимание, что в обоих случаях шаблон *.awk
не может быть заключен в кавычки. Заключение шаблона в кавычки сделает его сравнением строк, а не сопоставлением шаблона подстановки.
Причина, по которой ваш тест всегда оказывается успешным, двояка:
- Вы проверяете буквальную строку
*.awk
(включая пробелы с обеих сторон), которая, предположительно, никогда не совпадет, и - Вы отрицаете тест с помощью
!
.