windows git bash 中的奇怪命令替换行为

Strange command substitution behaviour in windows git bash

当我在git-bash.exe中使用命令替换运算符时,输出似乎不正确。例如:

$ git branch
  master
  one
* two

$ ls
a  b  c

$ echo $(git branch)
master one a b c two

如您所见,$(git branch) 的输出似乎插入了当前工作目录中的文件。

为什么会发生这种情况,我该如何解决?

请注意,这并非特定于 git bash。

这是因为 git branch 的输出有一个 "*" 告诉你你所在的分支:

$ git branch
* master
  one
  two

当命令为运行

时,星星被捕获
> cat file.sh
#!/usr/bin/env bash

set -x

BRANCHES=$(git branch)
> ./file.sh
++ git branch
+ BRANCHES='* master
  one
  two'

然后扩展到工作目录中的文件。

来自this reference

> git branch --format='%(refname:short)'
master
one
two

你可以去掉星星。

我相信我们是 advised against using the git porcelain commands for scripting though