Похоже, у Google был ответ на этот вопрос.
Поместите это волшебное заклинание перед for
утверждением:
shopt -s nullglob
Следующий фрагмент bash прекрасно работает, когда *.txt
в каталоге действительно есть файлы.
for txt in *.txt do echo "loading data from $txt" done
Когда их нет, литерал *.txt
попадает в цикл как $ txt (не хорошо).
Как изменить этот код, чтобы при отсутствии *.txt
файлов do ... done
блок пропускался?
Похоже, у Google был ответ на этот вопрос.
Поместите это волшебное заклинание перед for
утверждением:
shopt -s nullglob
Опция nullglob (ответ @ kfmfe04) лучше всего подходит, если вы используете bash (не оболочку brand-X), и вам не нужно беспокоиться о том, чтобы изменить / сломать nullglob. В противном случае вы можете использовать эту (немного более грязную) опцию:
for txt in *.txt do [ -e "$txt" ] || continue echo "loading data from $txt" done
Это автоматически пропускает файлы, которые не существуют (в основном «* .txt», если совпадений не было, но, возможно, также файлы, которые были удалены между моментом for
создания списка и моментом получения цикла ...)