For loop 有没有办法查看在for循环中迭代的列表?

For loop 有没有办法查看在for循环中迭代的列表?,for-loop,zsh,For Loop,Zsh,我对zsh脚本中的for-循环有问题。当它结束时,它会分离故障 我在done前后插入了echo-语句,之前的语句被打印(循环执行时多次),但第二个语句从未出现,而是发生了seg故障 该列表由一个非平凡的命令替换生成。 我使用相同的列表生成器尝试了一个简单的循环,只使用循环变量的echo作为主体,工作正常,没有seg故障。它还显示列表末尾没有虚假元素 这似乎仍然是一个关于-循环的单词列表的结尾,但我不知道在哪里继续我的调查。帮助?简单的循环运行正常表明列表生成器本身没有导致错误的错误 由于原始循环

我对zsh脚本中的
for
-循环有问题。当它结束时,它会分离故障

我在
done
前后插入了
echo
-语句,之前的语句被打印(循环执行时多次),但第二个语句从未出现,而是发生了seg故障

该列表由一个非平凡的命令替换生成。 我使用相同的列表生成器尝试了一个简单的循环,只使用循环变量的
echo
作为主体,工作正常,没有seg故障。它还显示列表末尾没有虚假元素


这似乎仍然是一个关于-循环的
单词列表的结尾,但我不知道在哪里继续我的调查。帮助?

简单的循环运行正常表明列表生成器本身没有导致错误的错误

由于原始循环也会打印每个(预期的)
echo
,除了循环后面的那一个,因此在最后一个元素和循环结束之间肯定会出现问题。在循环中的最后一个
回显
与循环后面的一个之间发生任何事情的唯一原因是,如果循环未完成,则只有在单词列表中有更多元素时才会发生

因此,最有可能的是列表末尾有一个虚假元素,但仅用
回音就看不到它(很容易)。例如
\b

prompt% for a in a b c; do echo $a; done
a
b
c
prompt% for a in a b c '\b'; do echo $a; done
a
b
c
prompt%
为了确保没有遗漏任何内容,可以将
echo
的输出通过管道传输到
hextump-C

prompt% for a in a b c '\b'; do echo $a | hexdump -C ;done
00000000  61 0a                                             |a.|
00000002
00000000  62 0a                                             |b.|
00000002
00000000  63 0a                                             |c.|
00000002
00000000  08 0a                                             |..|
00000002
prompt%