ls -1 выводит содержание каталога в одну строку по одному наименованию <(blabla) создает из команды поток, который передается как файловый десктриптор < перенаправление данных из файлового дескриптора в предыдущую команду done является частью цикла, поэтому перенаправление идет не в done а в весь блок цикла.
3. Ваш код мягко говоря дурно пахнет, а по сути он вообще кривой и будет сбоить на файлах со спецсимволами или даже пробелами. Можно сделать проще и правильнее:
shopt -s nullglob
for f in my_temp_dir/*; do
echo "$f"
done
nullglob нужен для случаев когда файлов совсем не будет, без него подставится строка со *, и это может вызвать ошибку в вашем коде.