Рассмотрим файловую структуру, созданную командами ниже в zsh.
mkdir fff fff/a fff/b
touch fff/{a,a/a,b/a,}.{x,y,z}
Я хочу поместить все файлы во все подкаталоги 'fff', которые не имеют расширения 'z'. Итак,
ls fff/**/^*.z(.)
делает трюк в интерактивной оболочке, предполагая, что установлена опция extended_glob
. Однако, когда я использую вышеупомянутый cl в make-файле, подобном этому
SHELL=/bin/zsh
list_not_z :
ls fff/**/^*.z(.)
, он ничего не делает и сообщает об ошибке:
ls fff / ** / ^ *. z (.)
zsh: 1: совпадений не найдено: fff / ** / ^ *. z (.)
С другой стороны, выполняется глобализация всех файлов, которые расширение 'z' с ls fff/**/*.z(.)
работает в интерактивном режиме так же, как и в make-файле. Итак, я подозреваю, что это как-то связано с тем, что ^
относится к расширенному синтаксису glob zsh. Соответствующая опция extended_glob
установлена в моем .zshr c.
Почему глобус работает, как ожидается, в интерактивной оболочке, но не выполняется при выполнении GNU как часть рецепта make-файла?