Почему разделение слов и расширение имен файлов не применяются к условному выражению внутри `[[ ... ]`?

Добавьте в конец записи таблицы cron: >> /home/myuser/myscript.log 2>&1

Это зафиксирует вывод в файл журнала. По умолчанию выходные данные отправляются с помощью локального демона почтовой программы пользователю, которому принадлежит задание, но я не уверен, что этот демон работает по умолчанию на экземпляре AWS. Если это так, попробуйте запустить почту от имени пользователя, владеющего заданием; у вас могут быть некоторые сообщения, ожидающие вас с выводом, который вы ищете.

0
13.04.2017, 15:37
2 ответа

Слова внутри [[ и ]] являются расширением, которое bash использует (среди прочего) для создания регулярных выражений:

Доступен дополнительный бинарный оператор '=~', с тем же приоритетом, что и '==' и '!='. При его использовании строка справа от оператора рассматривается как расширенное регулярное выражение и сопоставляется соответствующим образом (как в regex3).

Расширение имени файла с помощью регулярного выражения не будет полезным, поскольку оба используют одни и те же метасимволы * и ? для разных целей.

Further reading:

2
28.01.2020, 02:14

В документации к [[] команде вы увидите

Разбиение слов и расширение имени файла не выполняются для слов между [[ и ]]; выполняются расширение тильды, расширение параметров и переменных, арифметическое расширение, подстановка команды, подстановка процесса и удаление кавычек.

(выделение мое)

Также в операторе case есть исключения

Слово слово подвергается расширению тильды, расширению параметра, подстановке команды, арифметическому расширению и удалению кавычек перед попыткой поиска соответствия. Каждый шаблон подвергается расширению тильды, расширению параметров, подстановке команд и арифметическому расширению.

Примечательно отсутствие разбиения слов и расширения имен файлов.

Кроме того, назначение переменных (см. Параметры оболочки)

Переменная может быть назначена оператором вида

name=[value]

Если value не задано, переменной присваивается нулевая строка. Все значения подвергаются расширению тильдой, расширению параметров и переменных, подстановке команд, арифметическому расширению и удалению кавычек

Так что это безопасно:

a="hello world"
b=$a

Другие места, где разделение слов не выполняется:

Мой трюк: поищите слово "подвергается" в руководстве bash.

5
28.01.2020, 02:14

Теги

Похожие вопросы