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

时间:2014-01-10 15:43:26

标签: for-loop zsh

我在zsh脚本中遇到for - 循环问题。它只是在它结束时发生故障。

我已插入echo - done之前和之后的语句,并且打印前一个语句(多次,因为循环执行)但第二个从不出现,而是发生了seg-fault。

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

它似乎仍然是到达for循环单词列表末尾的东西,但我不知道在哪里继续我的调查。帮助

1 个答案:

答案 0 :(得分:0)

平凡循环正常表示列表生成器没有任何问题,导致错误。

由于原始循环还打印除循环之后的每个(预期的)echo,因此在最后一个元素和循环结束之间必须出错。在循环中的最后一个echo和循环之后的任何一个之间的唯一原因是,如果循环没有完成,只有在单词列表中有更多元素时才会发生。

因此,很可能在列表的末尾是一个虚假元素,但只有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的输出传输到hexdump -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%