缘起

某些情况下通配符会失灵, 比如:

git rm --cached */.DS_Store
### 系统会提示 no matches found
然后一般的解决方案是, 编辑~/.zshrc
setopt no_nomatch

因缘

http://forum.ubuntu.org.cn/viewtopic.php?t=284253
原文抄录这里, 向aerofox大神致敬

  • 问题: 如 $ scp ip:/home/tommy/* .在bash下可以执行,而在zsh下不可以识别通配符。请问为什么?

    • shell 不会按照远程地址上的文件去扩展参数,当你使用 ip:/home/tommy/,因为本地当前目录中,十不存在 ip:/home/tommy/,所以匹配失败。默认情况下,bash 在匹配失败时就使用原来的内容,zsh 则报告一个错误。在 zsh 中执行 setopt nonomatch 则告诉它不要报告 no matches 的错误,而是当匹配失败时直接使用原来的内容。
    • 实际上,不管是 bash 还是 zsh,不管设置了什么选项,只要把 ip:/home/tommy/* 加上引号,就可解决问题。