我在zsh脚本中遇到for
- 循环问题。它只是在它结束时发生故障。
我已插入echo
- done
之前和之后的语句,并且打印前一个语句(多次,因为循环执行)但第二个从不出现,而是发生了seg-fault。
该列表由非平凡的命令替换生成。
我尝试了一个简单的循环,使用相同的列表生成器,只有echo
循环变量作为正文,并且工作正常,没有seg-fault。它还表明列表末尾没有虚假元素。
它似乎仍然是到达for
循环单词列表末尾的东西,但我不知道在哪里继续我的调查。帮助
答案 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%