使用 ${var} 或 $var 之间的最佳实践是什么?

使用 ${var} 或 $var 之间的最佳实践是什么?

我知道这一点${var}并且$var做了同样的事情。我还知道您可以使用大括号来表示高级选项,例如${var:=word}${var#pattern}。也有解释这里

但我在一些 bash 脚本中看到以最简单的形式使用大括号:${var}有时我只看到这种表示法$var

有什么理由比简单的语法更喜欢这种语法,$var因为它做同样的事情?是为了便携吗?这是一种编码风格吗?

作为一个认真的开发人员,我应该使用哪种语法?

答案1

这是为了清楚起见。正如 arzyfex 所指出的,${foo}_bar和之间存在差异$foo_bar。始终使用大括号,您将永远不会犯这样的错误。另请注意,如果您希望引用多于一位数字的位置参数,则需要大括号,例如${11}

答案2

{}被称为brace expansion${}称为变量扩展。变量的声明和赋值不带$和不带{}。你必须使用

foo=50

分派。为了读取变量(换句话说,“扩展”变量),您必须使用$.

$foo      // use the variable
${foo}    // same as above
${foo}bar // expand foo, and append "bar" too
$foobar   // same as ${foobar}, i.e expand a variable called foobar, if it exists.

这有时让我感到困惑 - 在其他语言中,我们以相同的方式引用变量,无论它是在赋值的左侧还是右侧。但 shell 脚本不同,$foo=50它不会做你可能认为它会做的事情!


大括号还用于执行中的一系列命令当前的shell 上下文,例如

$ { date; top -b -n1 | head ; } >logfile 
# 'date' and 'top' output are concatenated, 

$ { date; make 2>&1; date; } | tee logfile
# now we can calculate the duration of a build from the logfile

相关内容