我觉得自己很蠢。我有一个 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"}