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'
然后扩展到工作目录中的文件。
> git branch --format='%(refname:short)'
master
one
two
你可以去掉星星。
我相信我们是 advised against using the git porcelain commands for scripting though。
当我在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'
然后扩展到工作目录中的文件。
> git branch --format='%(refname:short)'
master
one
two
你可以去掉星星。
我相信我们是 advised against using the git porcelain commands for scripting though。