zsh别名 - >功能?

ano*_*non 32 arguments zsh

假设我有:

alias gg="git grep"
Run Code Online (Sandbox Code Playgroud)

然后像:

gg "int x"
Run Code Online (Sandbox Code Playgroud)

有效,但是

gg int x
Run Code Online (Sandbox Code Playgroud)

得到投诉.有没有办法将gg重写为zsh中的函数,以便它获取gg之后的所有参数,并将它们填充到字符串中?

谢谢!

Pau*_*ce. 59

gg() { git grep "$*"; }
Run Code Online (Sandbox Code Playgroud)

  • 嗯,要让它们进入一个字符串,你需要``$*'`而不是`'$ @"` - 你写的形式会将它们作为单独的参数传递给它们,就像别名一样. (6认同)

Mic*_*ott 5

对于您的特定用例,这是一个坏主意。git-grep期待单参数模式。您正试图让 shell 将您的空间(在 int 和 x 之间)视为模式的一部分。当您尝试以下内容时,这将很快中断:gg foo.*bar或 shell 可能会解释的各种其他内容。所以后面的任何内容都gg应该引用。这就是为什么git grep int x也不起作用:fatal: ambiguous argument 'x': unknown revision or path not in the working tree...

如果您认为这gg是一个值得的击键保护程序,则应使 arg 与git-grep预期保持一致。您的原始别名适用于此。并继续单引号或双引号您的模式,就像您使用任何其他接受正则表达式的命令一样。