2017-08-07 9 views
0

私がecho $(git branch -vv)を使用しているときに、ブランチリストの代わりにディレクトリにファイルリストが表示されるのはなぜですか?どのようにgit branch -vvsed経由でbashスクリプトで改行を解析するのですか?Bash。 Echo git branch -vv

+1

あなたが実際にやろうとしていることを示すべきでしょうか? – poke

答えて

4

一般的な引用エラー。

git branchコマンドの出力は、現在アクティブなブランチを示す*で始まることがあります。このように:それは引用されていない場合

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

シェルはグロブとしてその*を拡大していきます。グロブの表現*は、現在のフォルダ内のすべてのファイルまたはフォルダを意味します。

さらに、コマンド置換の結果が単語分割の対象になるため、改行が失われます。つまり、シェルは結果をtabnewlinesまたはspaceで分割し、個々の引数をスペースで区切ってechoに渡します。つまり、

1 
2 
3 

echo 1 2 3になります。

echo $(git branch -vv) 

でなければなりません:

ソリューションは、コマンド置換を引用することである

echo "$(git branch -vv)" 

あなたの2番目の質問:Gitのブランチ-vvを解析する方法

改行を含むbashスクリプトでsedを使用しますか?

は非常に曖昧です。より具体的にしてください。

+1

ああ、それは、そのリストの最初のブランチが私の選択したものではなかったので、なぜ問題に遭遇しなかったのかを説明しています。 – poke

+0

ああ、良い点。私は、選択されたブランチが常にリストの一番上にあるという印象を受けました。 – hek2mgl

+0

'echo" $(...) "'はほとんど常に無意味です。コマンドの標準出力をキャプチャしています。単純に標準出力に書き出します。 'git branch -v'を使うだけです。 – chepner

関連する問題