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