Проблема в масштабе. переменная не имеет значения за пределами подоболочки, созданной каналом. Вместо этого:
while read line; do echo "read obtained: ${line}"; done < <(echo "a b c d e f g")
используйте цикл, как хотите. если вы хотите обработать текст с помощью одного из них, сделайте это. -С
Вам не нужен цикл. Достаточно промежуточной переменной. Используйте сигил расширения параметра^
для распределения по массиву.
dirpath=(*(N-/))
print -rC1 -- $^dirpath/*(.NOL[1,2])
Или вы можете использовать анонимную функцию, чтобы избежать временной переменной (, которая становится $argv
/ $@
аргументами анонимной функции):
() {print -rC1 -- $^@/*(.NOL[1,2])} *(N-/)