2

より単純な隠し場所にエイリアスを付けようとしているのでgit load <stashname>、次の行に沿って何かを行うことができます:

load = !git stash list | grep ' $1$' | awk '{ print $1 }' | sed '$ s/:$//'; echo

残念ながら、awk$1も stash 名に置き換えられています。その $ 記号をエスケープするにはどうすればよいですか? 試してみ\$ましたが、gitは次のように述べています:

fatal: bad config file line 33 in /home/alvaro/.gitconfig
4

1 に答える 1

1

$1 のどちらのオカレンスも置換されていません。それらは単一引用符で囲まれています。; echo行末の は単なるコメントです。したがって、実際には何もしていません。それをエイリアスの一部にしたい場合は、全体を二重引用符で囲む必要があります。

<stashname>行末に が追加されています (それが の目的だと思いますか?) あなたが提案するコマンドは、隠し場所の名前を指定して、次のechoようなものをエコーし​​たいようです。stash@{n}以下のエイリアスがそれを行います。(あまり役に立ちませんが)

[alias]
load = "!git stash list | grep \" $1$\" | awk '{ print $1 }' | sed '$ s/:$//' #"

最初の $1 は、二重引用符で囲まれているだけなので、引数に置き換えられます。逃げる必要があります。awk の $1 は に置き換えられません<stashname>。git ではすでに適用が可能であることに加えて、名前で隠した pop を使用できます。

$ git stash list # produces no output
$ echo "something" > else.txt
$ git stash something
Saved working directory and index state On master: something
HEAD is now at 6d3fcf0 merged
$ git load something
stash@{0}

こっちの方が見やすいかも

[alias]
test = "! echo $1 '$2' \"$3\" end; # "

結果は

$ git test first second third
first $2 third end
于 2013-09-08T17:23:45.903 に答える