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))}
酷客网相关文章:
评论前必须登录!
注册