我正在尝试添加一个别名,.gitconfig如果没有命令行参数,该别名应解析为默认值。
lgs = "!f() { git log --stat $1; }; f"
Run Code Online (Sandbox Code Playgroud)
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"我怎样才能正确实施它?
${1--1}我想,你想要这里。
Git 别名由 POSIX 风格的 shell ( ) 运行sh。POSIX shell 有:
${variable-default}
Run Code Online (Sandbox Code Playgroud)
和:
${variable:-default}
Run Code Online (Sandbox Code Playgroud)
作为扩展选项,如果$variable未设置,则改为default。该:-变体看起来有点像旧式表情符号之一,意思是“如果设置了变量但扩展为空字符串,则使用默认值”。
大多数情况下我们在这里使用变量名称,例如:
somevar=somevalue
Run Code Online (Sandbox Code Playgroud)
或者:
anothervar=$(git ls-files --stage -- file.ext)
Run Code Online (Sandbox Code Playgroud)
例如,然后我们就会有${somevar-default}. 但$1是第一个位置参数,$2是第二个位置参数,依此类推,这些也适用于这些位置。
在这种情况下,您想要的默认值是-1so ${1--1},确实看起来很有趣,但确实有效。
请注意,Vogel612 的评论非常接近,因为这些 shell 也有:
${variable=default}
Run Code Online (Sandbox Code Playgroud)
和:
${variable:=default}
Run Code Online (Sandbox Code Playgroud)
其行为类似(如果变量未设置,则扩展为默认值,在第二种情况下,如果变量也设置为空字符串),但也具有设置变量的副作用。当与 no-op :(冒号)命令一起使用时,这特别有用:
f() {
local name="$1" email="$2"
: ${name:="default name"} ${email:="<default.email@somewhere.com>"}
# 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.
}
Run Code Online (Sandbox Code Playgroud)
(不幸的是local,该构造虽然非常广泛可用并且通常是一个好主意,但不在 POSIX 中sh。最近我很惊讶地发现了这一点。它可以防止变量“逃逸”函数的范围。幸运的是,对于一次性函数Git 别名,不需要。)