2

長い間、エイリアス ファイルに次のエイリアスがありました。

ignore=!([ ! -e .gitignore ] && touch .gitignore) | echo $1 >>.gitignore

それは私にとってオリジナルではありませんでした。検索すると、多くの場所で表示されます。しかし、最近、エイリアスに奇妙な問題が発生し始めました。私が無視するものはすべて、.gitignore ファイルに同じ行に 2 回配置されます (スペースのみ)。

少しデバッグを行ったところ、実際に起こっていることは、 への呼び出しが期待どおりにecho $1エコー$1されているだけでなく、引数の文字列全体がエイリアスにエコーされていることであることがわかりました。

これをテストするために、新しいエイリアスを作成しました。

eo = !echo $1

> git eo test
test test    

> git eo test0 test1
test0 test0 test1

$1最後の行が最も興味深いのは、echo 呼び出しが正しく評価されている間、それに追加された引数のセット全体を取得していることを明確に示しているからです。実際、何かをいじって に変更$1すると$9(そして を満たさない場合$9)、次のようになります。

> git eo test0 test1
test0 test1

これは Git バージョン 1.8.5 から 1.9.0 で発生することを確認しており、Git バージョン 1.7.1 では発生しないことを確認しています。残念ながら、1.7.1 と 1.8.5 の間でテストすることはできません。

ここで何が起こっているのかについての洞察を持っている人はいますか? それは私のエイリアスのいくつかを壊します...

4

1 に答える 1