用于中断 ZSH 中的脚本执行

用于中断 ZSH 中的脚本执行

我觉得自己很蠢。我有一个 ZSH 脚本,其中包含两个文件循环,例如:

for f (*aaa*) {echo "$f"}
for f (*bbb*) {echo "$f"}

find如果第一个文件未找到匹配文件,则脚本退出。我需要脚本继续工作。

我错过了什么?

答案1

如果没有匹配,则*aaa*默认报告错误。这就是导致脚本退出的原因。

为了避免这种情况,NULL_GLOB必须设置该选项。然后,如果没有匹配项,则不会报告错误,而只是将模式从参数列表中删除。

有几种方法可以设置 NULL_GLOB:

  • 整个剧本通过将-G命令行选项传递给 来实现zsh。这也可以在 hash-bang 行上完成:
$ zsh -G 脚本
/usr/bin/zsh -G #!
对于 f (*aaa*) {echo "$f"}
对于 f (*bbb*) {echo "$f"}
  • 对于所有以下行通过使用 setopt 设置:
设置选项 NULL_GLOB
对于 f (*aaa*) {echo "$f"}
对于 f (*bbb*) {echo "$f"}
  • 对于单个模式通过使用 glob 限定符N
对于 f (*aaa*(N)) {echo "$f"}
对于 f (*bbb*) {echo "$f"}

相关内容