首页 > 解决方案 > 在函数内的直到语句处扩展“$@”

问题描述

很明显

# 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为什么?

标签: bash

解决方案


当您在 . 周围加上引号时"echo hi",它会寻找一个以它作为全名的命令,而不是执行echo带有参数的命令hi。它应该是:

until echo hi; do :; done

它在您的函数中起作用,因为"$@"分别引用每个参数,因此它相当于:

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

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


推荐阅读