$*が期待どおりに機能しないのはなぜですか?

$*が期待どおりに機能しないのはなぜですか?

関数に$ *を使用して関数のすべてのコマンドライン引数に拡張しようとすると、奇妙な動作が発生します。

$ 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は、コマンドで使用される構成です。repeatcsh repeatrepeat

repeat 10 echo foo

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

ただし、関数名として別のものを使用することをお勧めします。

関連情報