2016-09-18 74 views
1

我想做一个bash脚本,它将打印其他分支当前分支之前的提交。但是,当我在子shell中执行命令git branch时,我不仅获得分支名称,还获取当前目录中的文件和文件夹列表。为什么拨打$(git branch)表现如此?

+0

也许不同的目录 –

回答

4

这不是命令替换,而是引用。这里是git branch在回购结果:

$ git branch 
    5-job-test-fails 
* master 
    revisions 
    with_cool_background 

通知的askerisk。

当你写echo $(git branch),由于参数是未加引号,星号将扩大到当前目录下的文件:

$ echo $(git branch) 
5-job-test-fails app bin cable config config.ru db erd.pdf Gemfile Gemfile.lock Guardfile lib log public Rakefile README.rdoc test tmp vendor master revisions with_cool_background 

为了克服这个问题,引用的说法:在

$ echo "$(git branch)" 
    5-job-test-fails 
* master 
    revisions 
    with_cool_background 
+0

哇,从来没有想过会是这样。如果我必须构建迭代遍历所有分支的foreach语句,那么该如何?如何处理这位明星? –

+0

在处理分支名称之前,您必须先删除星号。有几种方法可以解决这个问题:https://stackoverflow.com/questions/3846380/how-to-iterate-through-all-git-branches-using-bash-script。根据接受的答案,最好不要在脚本中使用'git branch'。 – user000001