用于在 ZSH 中中断脚本执行

Igo*_*sic 3 zsh globbing

我觉得很蠢。我有一个带有例如两个文件循环的 ZSH 脚本,例如:

for f (*aaa*) {echo "$f"}
for f (*bbb*) {echo "$f"}
Run Code Online (Sandbox Code Playgroud)

如果第一个find没有找到匹配的文件,脚本将退出。我需要脚本才能继续工作。

我错过了什么?

Ada*_*hon 5

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

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

有几种方法可以设置 NULL_GLOB:

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