Этот метод более производительный, чем проверка существования на каждой итерации:
set q-*
[ -e "$1" ] || shift
for z; do echo "$z"
done
Мы используем set
, чтобы развернуть подстановочный знак в списке аргументов оболочки. Если первый элемент списка аргументов не является допустимым файлом, глобус ничего не соответствует. (В отличие от некоторых часто встречающихся попыток, это работает правильно, даже если первое совпадение с глобаном было в файле, имя которого совпадает с шаблоном глобуса.)
В случае несоответствия, список аргументов содержит один элемент, и мы смещаем его, так что список аргументов теперь пуст. Тогда цикл for
вообще не будет выполнять никаких итераций.
В противном случае мы перебираем список аргументов, в которые расширился глоб (это неявное поведение, когда нет in elements
после for variable
).