如何评估大括号内的变量

如何评估大括号内的变量

我是 shell 脚本新手,我遇到过这些表达式

${var:-val}${var-val}

${var:+val}${var+val}

${var:=val}${var=val}

那么它们是如何评估的以及它们之间有什么区别

答案1

这些都是各种形式的参数扩展和替代方案:

  • ${var:-val}val如果var未设置或为 null,${var}则替换为val“默认值”;
  • ${var:=val}首先分配valvarifvar未设置或 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}"

产生defaulta现在是default(由 确认echo "${a}")。

这种+形式可能看起来很奇怪,但是在分几个步骤构造变量时它很有用:

PATH="${PATH}${PATH:+:}/blah/bin"

仅当非空时才会在:前面添加,这避免了以 . 开头的路径。/blah/binPATH:

相关内容