Нет никакой разницы в for-l oop, но в способе расширения переменных. Рассмотрим эту программу:
x='a b'
for v in $x
do
echo $v
done
В bash слово $ x будет разбито на 2 аргумента, и, следовательно, l oop будет выполнено дважды, один раз для a
и один раз для b
. В zsh, $ x не будет при go разбиении слов, а l oop будет выполнен один раз для значения a b
. Это различие везде, когда вы раскрываете параметр.
В вашем случае l oop выполняется один раз, each
содержит полный вывод оператора ls
.
Of Конечно, в вашем случае было бы проще в zsh записать l oop как
for each in *(N)
, но если вам действительно нужна переменная, я бы использовал массив:
temp=(*(N))
Флаг N
после подстановочного знака обеспечивает получение пустой строки вместо сообщения об ошибке, если файлов нет.
Если вы также хотите перехватить точечные файлы (аналогично что бы ls -A
делал), используйте (ND)
.