2012-10-02 75 views
2

我想別名簡單的藏匿處,所以我可以做git load <stashname>,東西沿着這條線:

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

不幸的是,awk的$1正在被藏匿的名稱替換過。我如何逃避這個$符號?試圖\$,但混帳說:

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

不知道關於「$」的混帳配置文件中逃脫,但爲什麼不乾脆用了一個等效那個awk行,例如'sed's /。* //''(在第一個空格後剪切所有內容)。或者把它寫成一個單獨的shell腳本而不是git別名? –

+0

@AndyRoss如果你張貼作爲答案我會很樂意接受它。 –

+0

你究竟想在你的線索上做什麼?只是好奇。 –

回答

1

$ 1既不發生被替換。它們被單引號包圍。行尾的; echo只是一條評論。所以它沒有做任何事情。如果你想把它作爲別名的一部分,你需要用雙引號將整個東西包圍起來。

<stashname>被添加到該行的末尾(我假設是什麼echo是?)你提出的命令似乎想呼應類似給出藏匿的名稱[email protected]{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 
[email protected]{0} 

也許更容易看到它這樣

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

結果

$ git test first second third 
first $2 third end