Bash Shell多种类默认值

Bash Shell多种类默认值,你不想只使用字符串常量作为变量默认值。

解决方案

能出现在 shell 变量引用右侧的内容并不局限于字符串常量。例如:

cd ${BASE:="$(pwd)"}

讨论

如上所示,用于替换的值并不一定非得是字符串常量。它可以是更为复杂的 shell 表达式的结果,其中包括在子 shell 中运行的命令(如上述示例所示)。如果 $BASE 不存在,那么 shell 会运行内建命令 pwd(以获得当前目录),并使用其返回的字符串。

那么,我们可以在该运算符(以及其他类似运算符)右侧做些什么?bash 手册页对于出现在运算符右侧的内容是这么表述的:“……要经过波浪号扩展、参数扩展、命令替换以及算术扩展”。

具体含义如下。

  • 参数扩展意味着可以使用其他变量,如 {BASE:={HOME}}
  • 波浪号扩展意味着可以使用 ~bob 这样的表达式,它会扩展成用户 bob 的主目录。可以通过 ${BASE:=~uid17} 将默认值设置为用户 uid17 的主目录,但注意不要给 ~uid17 加引号,因为波浪号扩展不会在引号中执行。
  • 该示例用到的就是命令替换,它将命令的输出结果作为变量的值,其语法为 $(cmds)
  • 算术扩展意味着可以用 $(()) 语法执行整数算术运算。例如:
echo ${BASE:=/home/uid$((ID+1))}

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!