我觉得很蠢。我有一个带有例如两个文件循环的 ZSH 脚本,例如:
for f (*aaa*) {echo "$f"}
for f (*bbb*) {echo "$f"}
Run Code Online (Sandbox Code Playgroud)
如果第一个find
没有找到匹配的文件,脚本将退出。我需要脚本才能继续工作。
我错过了什么?
如果没有匹配*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"}
N
:对于 f (*aaa*(N)) {echo "$f"} 对于 f (*bbb*) {echo "$f"}