我知道这一点${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