Joh*_*n P 3 bash default-value
一般来说,此语法用于保证一个值,可能是默认参数。
(来自 Bash 参考手册)
${参数:-word}
如果参数未设置或为 null,则替换单词的扩展。否则,将替换参数的值。
如果仅在变量为空时才选择替换,那么将变量默认为空的目的是什么?
作为参考,我正在查看 /lib/lsb/init-functions。
“Null”表示该变量有一个值,并且该值是一个空字符串。shell 知道变量存在。
“Unset”意味着该变量尚未定义:就 shell 而言,它不存在。
在通常的模式下,shell 会将 null 和 unset 变量扩展为空字符串。但是有一种模式 ( set -u) 允许 shell 在变量未设置时展开时抛出运行时错误。启用此模式是一个很好的做法,因为很容易简单地错误输入变量名称并且很难调试错误。
从计算的角度来看,它实际上有助于区分未设置的变量和空变量,您可以为每种情况分配单独的语义。例如,假设您有一个可以接收参数的函数。如果未设置参数,您可能需要使用(非空)默认值;如果设置了参数,则可能需要使用传递给函数的任何值(包括空字符串)。你会做类似的事情:
my_function()
{
echo "${1-DEFAULT_VALUE}"
}
Run Code Online (Sandbox Code Playgroud)
然后,下面的两个命令将提供不同的输出:
my_function # Echoes DEFAULT_VALUE
my_function "" # Echoes an empty line
Run Code Online (Sandbox Code Playgroud)
还有一种扩展类型不区分 null 和 not set :
"${VAR:-DEFAULT_VALUE}"
Run Code Online (Sandbox Code Playgroud)
它们都很有用,具体取决于您的需要。
测试变量是否已设置的方法(不冒运行时错误的风险)是以下类型的扩展:
"${VAR+VALUE}"
Run Code Online (Sandbox Code Playgroud)
如果未设置,它将扩展为空字符串VAR;如果设置了(空或带有值),则扩展为 VALUE。当你需要的时候非常有用。
一般来说,它有助于:
set -u防止静默扩展失败这将使您的脚本更加可靠,并且更易于调试。
| 归档时间: |
|
| 查看次数: |
4965 次 |
| 最近记录: |