$ {1: - }是什么意思?

时间:2013-04-01 02:42:31

标签: bash

你能帮我解释一下BASH脚本中的表达式吗?

${1:-}

我以前从未见过它,所以我尝试了一下。

echo ${1:-}
echo ${1}

我看不出任何区别。

非常感谢!!!

3 个答案:

答案 0 :(得分:2)

来自man page

  

$ {参数:-word}

     

使用默认值。如果参数未设置或为null,则单词的扩展为   取代。否则,参数的值将被替换。

答案 1 :(得分:1)

只是一个改编自here

的小例子
varName="Aloha"
echo "varName is not empty: the two constructs behave the same"
echo ${varName-Hello World}
echo ${varName:-Hello World}
echo ""
unset varName
echo "varName is unset: they still behave the same way"
echo ${varName-Hello World}
echo ${varName:-Hello World}
echo ""
varName=""
echo "varName is empty: this is where the two differs"
echo ${varName-Hello World}
echo ${varName:-Hello World}
echo ""

basicalli :-会更改变量的值(如果它为空或未设置),:如果未设置则更改变量。

答案 2 :(得分:0)

目的不大。启用${1-}时,set -u是相关的,在这种情况下,它是另一个类似于${1+"$1"}的黑客,以防止在具有可能未设置的值的参数被解除引用的情况下抛出错误

 $ ( f() { printf '<%s> <%s>\n' $# ${1-}; }; set -u; f )
<0> <>
 $ ( f() { printf '<%s> <%s>\n' $# $1; }; set -u; f )
-bash: $1: unbound variable

当参数未设置或为null时,添加冒号将展开备用。在任何一种情况下,当扩展不加引号时,结果将始终不是args(无论IFS值如何)。由于在Bash的联机帮助页中指定了不幸的方式,人们不会意识到-:- PE运营商之间的差异并不罕见。

像往常一样,我建议不要在脚本中使用set -u。如果您认为它对调试很有用,请暂时使用它。