表达式 b=${b:-"/data"} 如何工作

表达式 b=${b:-"/data"} 如何工作

我运行了一个跨 shell 脚本BUILDDIR=${BUILDDIR:-"/data"},经过实验,如果原始 BUILDDIR 存在并且不是空字符串,则将其获取,否则将其设置为 /data。我不明白的是这个表达式是如何工作的——为什么:-运算符以及它们是如何工作的。

答案1

这是作为一部分完成的少数快捷方式之一(幸运的是)参数扩展。简而言之,有以下松散定义:

  • ${VAR:-value}$VAR尽可能使用,否则value
  • ${VAR:=value}如果可能的话使用$VAR,否则设置$VARvalue并使用value
  • ${VAR:?value}(exit if $VARis undefined) 和${VAR:+value}(相反:-) 存在,但我从未在野外见过它们。
  • ${VAR:offset}${VAR:offset:length}取 的子串$VAR

(还有很多其他方法可以删除前缀或后缀或进行一般替换;请参阅上面链接的 bash 信息页面。)

相关内容