在函数

时间:2018-05-05 10:50:07

标签: 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 3在语义上是否等于type 2?为什么呢?

1 个答案:

答案 0 :(得分:4)

当您在"echo hi"周围加上引号时,它会查找一个以该名称作为整个名称的命令,而不是使用参数echo执行hi命令。它应该是:

until echo hi; do :; done

它适用于您的函数,因为"$@"分别引用每个参数,因此它等同于:

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

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