Anthony Kong Asked: 2019-06-18 21:19:14 +0800 CST2019-06-18 21:19:14 +0800 CST 2019-06-18 21:19:14 +0800 CST git 能理解这个 {path1,path2,...} 语法吗? 772 我可以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理解这个路径语法吗? git bash 1 个回答 Voted Best Answer Kamil Maciorowski 2019-06-18T21:47:55+08:002019-06-18T21:47:55+08:00 调用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 它显示我ls得到了--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(除非你引用它们,否则你没有)。
调用
set -x
然后重复该命令。您将看到的第一件事应该是您正在运行的实际命令。例子:它显示我
ls
得到了--color=auto
(因为alias ls='ls --color=auto'
我碰巧有)但从未得到这些牙套 ({what,ever}
)。它们被 Bash 扩展,这称为大括号扩展。请注意,大括号扩展与路径无关。它对任意字符串进行操作,并且根本不关心结果是否可以解释为现有对象的路径或路径。
你的
git
线路基本上和我的ls
线路一样。假设没有别名干扰,你实际上运行无关紧要。它可能会或可能不会
foo{bar,baz}
特殊对待;但即使它这样做了,你的 shell 也会首先扩展它并且大括号永远不会到达git
(除非你引用它们,否则你没有)。