我运行了一个跨 shell 脚本BUILDDIR=${BUILDDIR:-"/data"}
,经过实验,如果原始 BUILDDIR 存在并且不是空字符串,则将其获取,否则将其设置为 /data。我不明白的是这个表达式是如何工作的——为什么:
和-
运算符以及它们是如何工作的。
答案1
这是作为一部分完成的少数快捷方式之一(幸运的是)参数扩展。简而言之,有以下松散定义:
${VAR:-value}
$VAR
尽可能使用,否则value
${VAR:=value}
如果可能的话使用$VAR
,否则设置$VAR
为value
并使用value
${VAR:?value}
(exit if$VAR
is undefined) 和${VAR:+value}
(相反:-
) 存在,但我从未在野外见过它们。${VAR:offset}
并${VAR:offset:length}
取 的子串$VAR
。
(还有很多其他方法可以删除前缀或后缀或进行一般替换;请参阅上面链接的 bash 信息页面。)