你能帮我解释一下 BASH 脚本中的表达式吗?
${1:-}
我以前从未见过它,所以我尝试了一些。
echo ${1:-}
echo ${1}
我看不出有什么区别。
非常感谢你!!!
你能帮我解释一下 BASH 脚本中的表达式吗?
${1:-}
我以前从未见过它,所以我尝试了一些。
echo ${1:-}
echo ${1}
我看不出有什么区别。
非常感谢你!!!
从手册页:
${参数:-字}
使用默认值。如果参数未设置或为空,则替换单词的扩展。否则,参数的值被替换。
只是一个改编自这里的小例子
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会更改变量的值,如果未设置,:
则更改它。
它没有太多目的。${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
当参数未设置或为空时,添加冒号将扩展备用。在任何一种情况下,当扩展未引用时,结果将始终为无参数(无论 IFS 值如何)。由于在 Bash 的联机帮助页中指定的不幸方式,人们不知道 the-
和PE 运算符之间的区别并不少见。:-
像往常一样,我建议永远不要set -u
在脚本中使用。如果您是发现它对调试有用的人之一,请仅暂时使用它。