Bash 语法查询:${*:- "-a"}

Bash 语法查询:${*:- "-a"}

我不明白 Bash shell 脚本中的含义:

MYSET=${*:- "-a"}

谁能解释一下吗?

答案1

如果变量未设置或为空,参数扩展${variable:-value}将扩展为字符串。这是一个标准参数扩展,对于 shell 来说并不特殊,但适用于所有 POSIX 兼容的 shell。valuevariablebash

特殊变量$*是一个字符串,由位置参数和第一个字符$IFS(默认为空格)作为分隔符连接而成。位置参数是给予脚本或 shell 函数的参数,或者使用set实用程序设置它们,即值$1$2$3等。这也不是bash特定的。

您的命令将变量设置MYSET$*(很可能是为脚本提供的命令行参数,它们之间有空格),除非该值为空,在这种情况下MYSET将设置为-a带有初始空格。在这种特殊情况下,周围的引号-a没有任何区别。

命令行上的示例代码:

$ set --
$ MYSET=${*:- "-a"}; printf '%s\n' "$MYSET"
 -a
$ set -- 1 2 3
$ MYSET=${*:- "-a"}; printf '%s\n' "$MYSET"
1 2 3

相关内容