2017-08-07 42 views
0

爲什麼當我使用echo $(git branch -vv)它顯示目錄中的文件列表,而不是分支列表?如何通過在bash腳本中用換行符解析git branch -vvBash。回聲git分支-vv

+1

也許你應該展示你實際想要做的事情? – poke

回答

4

典型的引用錯誤。

git分支命令的輸出可能以標記當前活動分支的*開頭。就像這樣:

* foo        4d49722 Unfinished 
    master       4d49722 [origin/master: 1 ahead] Unfinished 

殼將展開*的水珠,如果沒有加引號。 glob表達式*表示當前文件夾中的所有文件或文件夾。

此外,換行符會丟失,因爲命令替換的結果會受到分詞的影響。這意味着shell將結果拆分爲tabnewlinesspace,並將它們作爲由空格分隔的單獨參數傳遞給echo。這意味着:

1 
2 
3 

變成echo 1 2 3

解決的辦法是引用命令替換:

echo $(git branch -vv) 

必須是:

echo "$(git branch -vv)" 

你的第二個問題:

如何解析的Git分支-vv通過sed在bash腳本中換行?

非常含糊。請更具體一些。

+1

哦,這解釋了爲什麼我沒有遇到任何問題,因爲該列表中的第一個分支不是我選擇的。 – poke

+0

啊,好點。我的印象是,選定的分支將始終位於列表的頂部。 – hek2mgl

+0

'echo「$(...)」'幾乎總是毫無意義。您正在捕獲命令的標準輸出,只需將其寫入標準輸出即可。只需使用'git branch --v'。 – chepner