WLI*_*ION 7 shell scripting bash
我是 shell 脚本的新手,我遇到了这些表达式
${var:-val}
和 ${var-val}
${var:+val}
和 ${var+val}
${var:=val}
和 ${var=val}
那么它们是如何评估的,它们之间有什么区别
这些都是具有替代方案的各种形式的参数扩展:
${var:-val}
由val
ifvar
未设置或 null替换,${var}
否则(val
“默认值”也是如此);${var:=val}
首先分配val
给var
if var
is unset 或 null,然后(在所有情况下)被替换为${var}
;${var:+val}
被替换什么,如果var
是设置或为空,val
否则。省略:
掉所有这些定义的“或空”部分。
这在bash(1)
联机帮助页和POSIX 中都有描述。
一些例子可能会有所帮助:
unset a
echo "${a:-default}"
Run Code Online (Sandbox Code Playgroud)
产生default
,就像echo "${a-default}"
.
a=
echo "${a:-default}"
Run Code Online (Sandbox Code Playgroud)
再次产生default
,但echo "${a-default}"
输出一个空行。
a=test
echo "${a:-default}"
Run Code Online (Sandbox Code Playgroud)
产生test
,就像echo "${a-default}"
.
unset a
echo "${a:=default}"
Run Code Online (Sandbox Code Playgroud)
产生default
,a
现在是default
(由 确认echo "${a}"
)。
这种+
形式可能看起来很奇怪,但在分几个步骤构造变量时它很有用:
PATH="${PATH}${PATH:+:}/blah/bin"
Run Code Online (Sandbox Code Playgroud)
仅在非空时才会添加:
before ,从而避免路径以./blah/bin
PATH
: