Shell - 使用带有破折号的变量

Shell - use of the variable with dash

我正在阅读这里的 tcollector init.sh 文件:https://github.com/OpenTSDB/tcollector/blob/master/rpm/initd.sh#L25

第 25 行中的破折号是什么意思TCOLLECTOR=${TCOLLECTOR-/usr/local/tcollector/tcollector.py}

(我原本以为它只是将破折号后的路径分配给 TCOLLECTOR;但是我的测试显示了两个不同的结果:

  1. 如果 TCOLLECTOR 已经被赋值,它将保留该值
  2. 否则 TCOLLECTOR 的值为“/usr/local/tcollector/tcollector.py”

我也查看了“-”的使用,但它都是关于 STDIN 和 STDOUT 的...我不知道它们与我的问题有何关系。)

谢谢。

这是一个参数扩展的例子;一般 POSIX 品种已记录在案 here, and you can read about the Bash incarnation here

基本上,减号扩展完全符合您的描述:${anyVariable-anyExpression} 如果已设置则扩展为 $anyVariable 的值,但如果未设置则扩展为 anyExpression.

加号的作用恰恰相反:如果 $anyVariable 有值,${anyVariable+anyExpression} 扩展为 anyExpression,如果未设置,则扩展为空字符串(空字符串)。

还有其他几个选项。