我试图在函数中使用 $* 来扩展到函数中的所有命令行参数,但它给了我奇怪的行为:
$ function repeat() {
echo "$*"
}
$ repeat puts hello # this gives me nothing at all
$ repeat "puts hello" # this asks me for more input
repeat>
它为什么要这么做呢?
答案1
你在zsh
,不在bash
。
在 中zsh
,repeat
(受 启发csh
repeat
) 是用于命令的构造repeat
。
repeat 10 echo foo
会 echo foo 10 次。
如果你想调用你的 repeat
,你需要引用它,这样它就不会被视为repeat
保留字。
$ echo $ZSH_VERSION
5.0.2
$ 'repeat'() echo "$*"
$ type -a repeat
repeat is a reserved word
repeat is a shell function
$ repeat 2 echo foo
foo
foo
$ "repeat" 2 x
2 x
不过,最好是使用其他名称作为函数名称。