很明显
# 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 3
在语义上是否等于type 2
?为什么呢?
答案 0 :(得分:4)
当您在"echo hi"
周围加上引号时,它会查找一个以该名称作为整个名称的命令,而不是使用参数echo
执行hi
命令。它应该是:
until echo hi; do :; done
它适用于您的函数,因为"$@"
分别引用每个参数,因此它等同于:
until "echo" "hi"; do :; done;
如果您使用"$*"
而不是"$@"
,则该函数将等同于类型1,因为它会将所有参数一起引用,而不是单独引用。