1

次のコマンドを実行すると:

for r in $(git branch -r | grep -Po "(?<=myremote/).*"); do echo git branch --track $r myremote/$r; done

次の出力が得られます。

git branch --track foo myremote/foo
git branch --track bar myremote/bar
git branch --track baz myremote/baz

これらのエコーされたコマンドを個別に実行すると、次の出力が得られます。

Branch foo set up to track remote branch foo from myremote.
Branch bar set up to track remote branch bar from myremote.
Branch baz set up to track remote branch baz from myremote.

一方、次のワンライナーを実行すると(単に「エコー」を削除します):

for r in $(git branch -r | grep -Po "(?<=myremote/).*"); do git branch --track $r myremote/$r; done

ブランチの作成は失敗し、次の出力が表示されます。

fatal: 'foo' is not a valid branch name.
fatal: 'bar' is not a valid branch name.
fatal: 'baz' is not a valid branch name.

実行中のコマンドに何か違いがありますか? どうすればこれをデバッグできますか?

アップデート:

--color=neverforを指定した場合でも、目に見えない制御文字が unix パイプを流れているようですgrep。正規表現を(?<=myremote/)[\w]*問題に変更すると解決します。ただし、誤った制御文字がどこから来ているのかはまだわかりません。echo $r | od -cパイプを通過する生データを表示するために出力に追加すると、そこに余分な制御文字があることが明らかです。

元の正規表現による出力:

0000000   f   o   o 033   [   m  \n
0000007

新しい正規表現による出力:

0000000   f   o   o  \n
0000004

オプションを追加してから追加された文字はどこから来たの--color=neverですか?

4

1 に答える 1