git 能理解这个 {path1,path2,...} 语法吗?

git 能理解这个 {path1,path2,...} 语法吗?

我可以ls -l ../lib/boto/{route53,ec2,beanstalk,mturk}在 Bash 中执行此操作并且它会产生预期的结果。

但是如果我这样做

$ git rm -r ../lib/boto/{route53,ec2,beanstalk,mturk}

我明白了

fatal: pathspec '../lib/boto/ec2' did not match any files

是否git理解这个路径语法?

答案1

调用set -x然后重复该命令。您首先看到的应该是您正在运行的实际命令。示例:

$ set -x
$ ls -l ../lib/boto/{route53,ec2,beanstalk,mturk}
+ ls --color=auto -l ../lib/boto/route53 ../lib/boto/ec2 ../lib/boto/beanstalk ../lib/boto/mturk
(actual output here, omitted)
$ set +x     # to revert

它显示了我的lsgot --color=auto(因为alias ls='ls --color=auto'我碰巧有)但从来没有得到过这些括号({what,ever})。它们被 Bash 扩展了,这被称为括号扩展

括号扩展是一种可以生成任意字符串的机制。此机制类似于文件名扩展,但生成的文件名不需要存在。

请注意,括号扩展与路径无关。它对任意字符串进行操作,并不关心结果是否可以解释为现有对象的路径或路径。

你的git线路基本上和我的ls线路一样。假设没有别名干扰,你实际上运行

git rm -r ../lib/boto/route53 ../lib/boto/ec2 ../lib/boto/beanstalk ../lib/boto/mturk

是否git理解这个路径语法?

无关紧要。它可能会或可能不会进行foo{bar,baz}特殊处理;但即使它进行了特殊处理,你的 shell 也会先将其展开,而括号永远不会到达git(除非你引用它们,否则你没有)。

相关内容