变量名后的'-'(破折号)在这里做什么?

if [ -n "${BASH-}" -o -n "${ZSH_VERSION-}" ] ; then

hash -r 2>/dev/null

fi

在哪里可以找到参考?谢谢。

回答:

a ${...}中的变量称为“参数扩展”。在在线手册或实际手册中

搜索该术语(第792行)。 该形式是在形式上相似。仅在展开前一行(行810)说明了差异:

${var-}``${var:-}``:-

… bash测试未设置或为null的参数。省略冒号只会对未设置的参数进行测试。

因此,这种形式是测试仅当变量被复位( 不为空),并且替换整个扩张${...}为后的值-,在这种情况下是 。

因此,${var-}变为:

  1. 当var具有值(而不是null)时,var的值。
  2. 另外,当var为null:时,var的值(冒号:丢失!)''也因此为null。
  3. ''如果未设置var ,则-之后的值(在这种情况下为null )。

所有这些实际上就是:

  1. 展开为''var未设置或为null时。
  2. 扩展到var的值(当var具有值时)。

因此,扩展没有改变var的值,也没有扩展,只是在shell nounset设置了选项的情况下避免了可能的错误。

此代码将在以下两种用途上均停止$var

#!/bin/bash

set -u

unset var

echo "variable $var"

[[ $var ]] && echo "var set"

但是,此代码将正确运行:

#!/bin/bash

set -u

unset var

echo "variable ${var-}"

[[ ${var-} ]] && echo "var set"

以上是 变量名后的'-'(破折号)在这里做什么? 的全部内容, 来源链接: utcz.com/qa/398810.html

回到顶部