为什么 $* 没有按预期工作?

为什么 $* 没有按预期工作?

我试图在函数中使用 $* 来扩展到函数中的所有命令行参数,但它给了我奇怪的行为:

$ 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

在 中zshrepeat(受 启发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

不过,最好是使用其他名称作为函数名称。

相关内容