Расширение *.txt
обычно выполняется оболочкой перед выполнением любых команд. Так что нет, это не приведет к бесконечному циклу.
Я говорю "обычно", поскольку это зависит, конечно, от используемой вами оболочки. Но каждая оболочка, с которой у меня был опыт, работает таким образом, включая bash
, как показано ниже:
pax$ rm -rf *.xyzzy ; touch 1.xyzzy 2.xyzzy ; ls *.xyzzy
1.xyzzy 2.xyzzy
pax$ echo ===== ; for i in *.xyzzy ; do
> echo Processing $i
> echo ..... before touch ; ls *.xyzzy
> touch 3.xyzzy
> echo ..... after touch ; ls *.xyzzy
> echo =====
> done
=====
Processing 1.xyzzy
..... before touch
1.xyzzy 2.xyzzy
..... after touch
1.xyzzy 2.xyzzy 3.xyzzy
=====
Processing 2.xyzzy
..... before touch
1.xyzzy 2.xyzzy 3.xyzzy
..... after touch
1.xyzzy 2.xyzzy 3.xyzzy
=====
pax$ ls *.xyzzy
1.xyzzy 2.xyzzy 3.xyzzy
Вы заметите, что файл 3
, добавленный во время первой итерации цикла , не влияет на цикл вообще, потому что расширение уже было выполнено в этой точке.