Bash “扩大”$@&引用;函数中的at-till语句

Bash “扩大”$@&引用;函数中的at-till语句,bash,Bash,很明显 # type 1 until "echo hi"; do :; done 不起作用,因为until的语法应该如下 # type 2 echo hi; until [ $? -eq 0 ]; do echo hi; done 以确保成功打印hi 然而,我发现 # type 3 (similar to type 1) function makesure { until "$@"; do :; done } makesure echo hi 也如预期的那样工作,但我不知道为什么它会工作

很明显

# type 1
until "echo hi"; do :; done
不起作用,因为
until
的语法应该如下

# type 2
echo hi; until [ $? -eq 0 ]; do echo hi; done
以确保成功打印
hi

然而,我发现

# type 3 (similar to type 1)
function makesure { until "$@"; do :; done }
makesure echo hi
也如预期的那样工作,但我不知道为什么它会工作


类型3
在语义上是否等于
类型2
?为什么?

当您在
的“echo hi”
周围加上引号时,它会查找一个具有该全名的命令,而不是使用参数
hi
执行
echo
命令。应该是:

until echo hi; do :; done
它在函数中起作用,因为
“$@”
分别引用每个参数,因此它相当于:

until "echo" "hi"; do :; done;

如果您使用
“$*”
而不是
“$@”
,则该函数相当于类型1,因为它将所有参数一起引用,而不是单独引用。

当您在
“echo hi”
周围加上引号时,它将查找一个具有该全名的命令,不使用参数
hi
执行
echo
命令。应该是:

until echo hi; do :; done
它在函数中起作用,因为
“$@”
分别引用每个参数,因此它相当于:

until "echo" "hi"; do :; done;
如果您使用
“$*”
而不是
“$@”
,则该函数相当于类型1,因为它将所有参数一起引用,而不是单独引用