【发布时间】:2011-01-11 13:42:08
【问题描述】:
假设我有:
alias gg="git grep"
然后是这样的:
gg "int x"
有效,但是
gg int x
收到投诉。有没有办法将 gg 重写为 zsh 中的函数,以便它获取 gg 之后的所有参数,并将它们填充到一个字符串中?
谢谢!
【问题讨论】:
假设我有:
alias gg="git grep"
然后是这样的:
gg "int x"
有效,但是
gg int x
收到投诉。有没有办法将 gg 重写为 zsh 中的函数,以便它获取 gg 之后的所有参数,并将它们填充到一个字符串中?
谢谢!
【问题讨论】:
gg() { git grep "$*"; }
【讨论】:
"$*" 而不是 "$@" - 您编写的表单会将它们作为单独的参数传递,就像别名一样。
对于您的特定用例,这是一个坏主意。 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 是一个有价值的击键保护程序,你应该保持你的参数与git-grep 期望的一致。您的原始别名对此很好。并继续单引号或双引号,就像使用任何其他正则表达式接受命令一样。
【讨论】: