関数に$ *を使用して関数のすべてのコマンドライン引数に拡張しようとすると、奇妙な動作が発生します。
$ 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
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
ただし、関数名として別のものを使用することをお勧めします。