带参数的 ZSH 别名

我试图为我的简单 git add/commit/push 创建一个带参数的别名。

我知道一个函数可以用作别名,所以我尝试了,但是没有成功。

之前:

alias gitall="git add . ; git commit -m 'update' ; git push"

但是我希望能够修改我的提交:

function gitall() {
"git add ."
if [$1 != ""]
"git commit -m $1"
else
"git commit -m 'update'"
fi
"git push"
}
103807 次浏览

"git add .""之间的其他命令只是 bash 的字符串,删除 "

您可能希望在 if 体中使用 [ -n "$1" ]

你不能用参数创建别名,它必须是一个函数。函数很接近,只需要引用某些参数而不是整个命令,并在 []中添加空格。

gitall() {
git add .
if [ "$1" != "" ] # or better, if [ -n "$1" ]
then
git commit -m "$1"
else
git commit -m update
fi
git push
}

* : 大多数 shell 不允许别名中的参数,我相信 csh 和衍生物允许,但是 反正你也不该用它们允许。

如果出于某种原因,您确实需要使用带参数的别名,您可以通过在别名中嵌入一个函数并立即执行它来解决这个问题:

alias example='f() { echo Your arg was $1. };f'

我发现这种方法在.gitconfig 别名中用得很多。

我在.zhrc 文件中使用了这个函数:

function gitall() {
git add .
if [ "$1" != "" ]
then
git commit -m "$1"
else
git commit -m update # default commit message is `update`
fi # closing statement of if-else block
git push origin HEAD
}

在这里,git push origin HEAD负责将当前分支推到远程。

从命令提示符运行以下命令: gitall "commit message goes here"

如果我们只运行 gitall而没有任何提交消息,那么提交消息将是 update,如函数所述。

我尝试接受的答案(凯文的) ,但得到以下错误

defining function based on alias `gitall'
parse error near `()'


因此,根据 饭桶问题将语法改为这种语法,并且这种方法是有效的。

    function gitall {
git add .
if [ "$1" != "" ]
then
git commit -m "$1"
else
git commit -m update
fi
git push
}

带参数的别名

译者:

使用带参数的别名:

alias foo='echo bar'
# works:
foo 1
# bar 1
foo 1 2
# bar 1 2

解释过了

(空格分隔)别名后面的字符将按照您编写它们的顺序作为参数处理。

不能像使用函数那样对它们进行排序或更改。 例如,在函数或子 shell 的帮助下,通过别名将参数放到命令中间确实是可行的: 见汤姆的回答

这种行为类似于 bash

我可以很容易地添加参数只需使用1美元。

例如:

alias gsf="git show --name-only $1"

工作正常。我只是使用 gsf 2342aa225来称呼它