Sh 解释${var:-val}和${var+;val}

Sh 解释${var:-val}和${var+;val},sh,Sh,有人能解释一下这种格式吗 ${name:-$devi} 例如: "${1+"$@"}" will check for that first variable to be set , if not it will use that command line argument. 这些变量之间的:-和+有什么区别 ${var:-val} 与${var}相同,如果var设置为非空,否则它将扩展为val。这用于指定变量的默认值 ${var+val} "${1+"$

有人能解释一下这种格式吗

${name:-$devi}
例如:

      "${1+"$@"}" will check for that first variable to be set , if not it will use that 

        command line argument. 
这些变量之间的
:-
+
有什么区别

${var:-val}
${var}
相同,如果
var
设置为非空,否则它将扩展为
val
。这用于指定变量的默认值

${var+val}
"${1+"$@"}"
如果
var
未设置,则扩展为nothing,否则扩展为
val
。这用于为变量提供备用值

${var+val}
"${1+"$@"}"
是解决旧shell版本中错误的一种方法。如果您刚刚编写了
“$@”
,那么当没有提供参数时,它将扩展到
,而不是什么都不扩展;然后,脚本将充当提供了一个空参数的角色。该语法首先检查是否设置了
$1
——如果没有第一个参数,那么显然根本就没有参数。如果未设置
$1
,它将扩展为零,否则可以安全地使用
“$@”

大多数现代的shell版本都没有这个bug,因此您只需编写
“$@”
,而无需进行特殊检查。我不确定shell变量扩展中的
+
构造是否还有其他常见用例

${var}
相同,如果
var
设置为非空,否则它将扩展为
val
。这用于指定变量的默认值

${var+val}
"${1+"$@"}"
如果
var
未设置,则扩展为nothing,否则扩展为
val
。这用于为变量提供备用值

${var+val}
"${1+"$@"}"
是解决旧shell版本中错误的一种方法。如果您刚刚编写了
“$@”
,那么当没有提供参数时,它将扩展到
,而不是什么都不扩展;然后,脚本将充当提供了一个空参数的角色。该语法首先检查是否设置了
$1
——如果没有第一个参数,那么显然根本就没有参数。如果未设置
$1
,它将扩展为零,否则可以安全地使用
“$@”


大多数现代的shell版本都没有这个bug,因此您只需编写
“$@”
,而无需进行特殊检查。我不确定shell变量扩展中的
+
构造是否还有其他常见用例。

您是否阅读过手册页?我不确定我是否能更好地解释它。它只是我所指代码中的一部分。我无法在该表示中区分“:-”和“+”。我得到了解决方案,${variable:?word}如果未定义或null | |${variable:-word}如果未定义或null | |${variable:+word},请使用新值与上述| |${variable:=word}相反,如果未定义或为空,请使用新值,然后重新定义。您是否尝试阅读手册页?我不确定我是否能更好地解释它。它只是我所指代码中的一部分。我无法在该表示中区分“:-”和“+”。我得到了解决方案,${variable:?word}如果未定义或null | |${variable:-word}如果未定义或null | |${variable:+word},请使用新值与上述| |${variable:=word}相反,如果未定义或为null,请使用新值,然后重新定义。