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,因为它将所有参数一起引用,而不是单独引用