我已经 checkout 一个项目,该项目包含一个 .gitignore
文件。
这个文件的内容是这样的
vx1% head .gitignore
./deps
/*.exe
/*.la
/.auto
.libs
ChangeLog
Makefile
Makefile.in
aclocal.m4
autom4te.cache
我想要想要这样做的原因是我不相信项目 Makefile 会完全清理它生成的文件。
笔记
如您所见,.gitignore 使用了一些我需要在运行命令之前修改的 glob,否则 glob 将解析到我的根目录。
我已经知道的
将任意字符串动态评估为 glob 模式
DYN="*.c"
打印 $~DYN
去除前导/,如果它存在
DYN="/*.c"
打印 ${~DYN/#//}
我有什么
猫.gitignore |读我的时候;做回声 $i ;打印 ${~i/#//} ;完毕
问题
此循环遇到的第一个 glob 失败,它以错误终止
zsh: no matches found: *.exe
我想要的是“脚本”应该继续遍历文件的每一行,依次尝试每一行。
我自己回答了这个,答案在下面
最佳答案
以典型的 Zsh 方式在 zsh mailing list 上找到答案 - 当您知道如何做时,这非常简单,否则就不可能。
print *.nosuchextension(N)
(N) glob 参数可防止在匹配失败时引发错误。
关于error-handling - zsh 在 glob 失败中幸存下来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18931477/