3

Я чувствую себя глупо У меня есть скрипт ZSH, например, с двумя файловыми циклами, например:

for f (*aaa*) {echo "$f"}
for f (*bbb*) {echo "$f"}

Сценарий завершается, если при первом find не найдено подходящих файлов. Мне нужен сценарий, чтобы продолжать работать.

Что мне не хватает?

1 ответ1

5

Если нет совпадения для *aaa* об ошибке сообщается по умолчанию. Это то, что заставляет ваш скрипт выйти.

Чтобы избежать этого, должна быть установлена опция NULL_GLOB . Затем вместо сообщения об ошибке шаблон просто удаляется из списка аргументов, если ничего не найдено.

Есть несколько способов установить NULL_GLOB:

  • для всего сценария , передав опцию командной строки -G в zsh . Это также можно сделать в строке hash-bang:
$ zsh -G SCRIPT
#!/usr/bin/zsh -G
for f (*aaa*) {echo "$f"}
for f (*bbb*) {echo "$f"}
  • для всех следующих строк , установив его с помощью setopt:
setopt NULL_GLOB
for f (*aaa*) {echo "$f"}
for f (*bbb*) {echo "$f"}
  • для одного шаблона с использованием префикса glob N:
for f (*aaa*(N)) {echo "$f"}
for f (*bbb*) {echo "$f"}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .