在bash中使用:-(冒号破折号)
这种风格在bash中的含义是什么在bash中使用:-(冒号破折号),bash,syntax,Bash,Syntax,这种风格在bash中的含义是什么 ${PUBLIC_INTERFACE:-eth0} :-的用途是什么?如果$PUBLIC\u INTERFACE存在且不为空,则返回其值,否则返回“eth0” 实际上,以下文件中记录了其中的一些: ${parameter:-word}使用默认值。如果参数为unset或null,则替换word的展开形式。否则,将替换参数的值 ${parameter:=word}指定默认值。如果参数未设置或为空,则word的展开式将指定给参数。然后替换参数的值。位置参数和特殊参数
${PUBLIC_INTERFACE:-eth0}
:-
的用途是什么?如果$PUBLIC\u INTERFACE
存在且不为空,则返回其值,否则返回“eth0”
实际上,以下文件中记录了其中的一些:
${parameter:-word}使用默认值。如果参数为unset或null,则替换word的展开形式。否则,将替换参数的值
${parameter:=word}指定默认值。如果参数未设置或为空,则word的展开式将指定给参数。然后替换参数的值。位置参数和特殊参数不能以这种方式指定给
${参数:?word}如果为空或未设置,则显示错误。如果参数为null或unset,则word的扩展(如果word不存在,则会显示相应的消息)将写入标准错误,如果shell不是交互式的,则退出。否则,将替换参数的值
${参数:+word}使用备用值。如果参数为null或unset,则不替换任何内容,否则替换word的展开形式
:-
用于${parameter:-word}
:如果参数
为null或未设置,则扩展为word
的值,否则扩展为参数
的值
例如:
$ str=
$ echo "${str:-default}"
default
使用:=
、:+
和:?
的类似扩展都有两种风格:带冒号和不带冒号。不同之处在于,带有冒号的扩展用于“null或unset”,而没有冒号的扩展仅用于“null”
注意:
$ str= # Null, but not unset
$ echo "${str-default}" # Expands to value of $str, the empty string
$ echo "${str:-default}" # Expands to "default"
default
这在哪里有用?举几个例子:
- 默认值
- 为编辑最后一个命令而调用的编辑器是展开的结果
:${FCEDIT:-${editor:-vi}
如果已定义且不为空,或者$FCEDIT
如果已定义且不为空,或者$editor
vi
- 脚本中的循环,如果作为参数提供,则应从文件读取,否则从标准输入读取,可能如下所示:
而IFS=read-r行;做 #做点什么 完成<“${1:-/dev/stdin}”
- 为编辑最后一个命令而调用的编辑器是展开的结果
- 使用
设置-u时
是一种方便的方法,可以强制执行更干净的脚本编写,方法是在遇到未设置的变量时让脚本死亡,例如(我并不支持其中的所有内容1)。如果我们想检查某个变量是否有一个set-u
值,那么如果[[$var]]
未设置,脚本现在将终止,即使这可能是合法的 解决方法是使用var
,而[[${var:-}]]
不会抱怨。(这基本上是再次使用默认值,但在本例中,替换的值是空字符串。)set-u
1另见