我正在嘗試添加一個別名,.gitconfig如果沒有命令列引數,該別名應該決議為默認值。
lgs = "!f() { git log --stat $1; }; f"
git lgs應該列印最后一次提交的統計日志。
git lgs -2- 應該列印最后 2 次提交的統計日志。(這個正在作業)。
我嘗試了幾個選項但沒有結果
lgs = "!f() { git log --stat $1:=-1; }; f"lgs = "!f() { git log --stat $1:-1; }; f"lgs = "!f() { git log --stat $1=-1; }; f"
我怎樣才能正確實施它?
uj5u.com熱心網友回復:
你想要${1--1}這里,我想。
解釋
Git 別名由 POSIX 風格的 shell ( sh) 運行。POSIX 外殼具有:
${variable-default}
和:
${variable:-default}
作為擴展選項,如果$variable沒有設定,你會得到default代替。該:-變體看起來有點像那些舊式表情符號之一,意思是“如果設定了變數但擴展為空字串,則使用默認值”。
在大多數情況下,我們在這里使用變數名,例如:
somevar=somevalue
或者:
anothervar=$(git ls-files --stage -- file.ext)
例如,然后我們會有${somevar-default}. 但是$1是第一個位置引數,$2是第二個,依此類推,這些也適用于這些位置。
在這種情況下,您想要的默認值是-1so ${1--1},這確實看起來很有趣,但確實有效。
請注意,Vogel612 的評論非常接近,因為這些 shell 也有:
${variable=default}
和:
${variable:=default}
它們的行為類似(如果變數未設定,則擴展為默認值,在第二種情況下,如果變數也設定為空字串),但也有設定變數的副作用。這在與 no-op :(冒號)命令一起使用時特別有用:
f() {
local name="$1" email="$2"
: ${name:="default name"} ${email:="<[email protected]>"}
# now you can refer to "$name" and "$email";
# they are set and non-empty, even if someone passed the
# empty string as arguments 1 and/or 2.
}
(不幸的是,該local構造雖然非常廣泛可用并且通常是一個好主意,但它不在 POSIX 中sh。我最近發現這一點很驚訝。它使變數不會“逃逸”函式的范圍。幸運的是,對于一次性函式Git 別名,不需要。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/362999.html
上一篇:使用Sed僅替換包含字串的整行
下一篇:腳本作為變數值
