Я думаю, что могу решить вашу проблему довольно простым способом.
Я не хочу использовать не встроенные функции:
unset i
rm *.txtx
# Now it is sure no matching file is in this dir
while a=(*.txtx) [ ! -e "$a" ]; do
echo loop $i;
[ $((++i)) -eq 5 ] && >a.txtx # Creates a matching file if i == 5
done
ls *.txtx
Выход:
loop
loop 1
loop 2
loop 3
loop 4
loop 5
a.txtx
Недостаточно проверить размер массива, так как если нет файла, соответствующего шаблону, то размер массива будет равен 1, содержащему шаблон *.txtx
. Но может существовать файл с именем *.txtx
, поэтому необходимо использовать -e
, чтобы проверить, является ли результат просто шаблоном или реальным файлом.
Если в цикле создано больше подходящих файлов, оно все равно работает, так как $a
совпадает с ${a[0]}
.
Надеюсь, это поможет!