在Git中转义glob模式中的字符

Par*_*rag 8 git shell

以下git命令(删除以〜结尾的所有文件)使用转义字符

git rm \*~
Run Code Online (Sandbox Code Playgroud)

理由是,除了shell使用的扩展之外,git还使用它自己的文件名扩展.

这是否意味着转义字符是一种抑制shell完成文件名扩展的方法?

不知何故,我无法对此进行妥善处理.

  • 为什么git使用它自己的文件名扩展?是因为shell文件名扩展可以在不同的shell/OS中以不同的方式工作
  • 如果是这样,为什么不在git命令的shell级别禁止文件名扩展,并允许git用glob模式执行它自己的语义

use*_*342 5

是的,转义字符会抑制Unix shell正常执行的文件名扩展.回答这些问题:

  1. git rm实现自己的扩展可能是因为文件可能不存在于签出目录中.(想想你最初的情况rm *~,然后记住你也想要将它们从中删除git.)

  2. 使用反斜杠转义字符(或用引号括起参数)就是这样做 - 禁止在shell级别扩展文件名.这不能git自动完成,因为git无法控制shell,在执行时,扩展已经结束.shell本身必须防止扩展,或者更实际的是,最终用户git通过shell 调用.