$ var和$ {var}之间有什么区别

时间:2011-04-19 05:57:55

标签: shell

我看到一些像这样的代码

  SERIAL_NO="121"
  if [ -z "${SERIAL_NO}" ]; then
     echo -e "ERROR: serial number of the device is not provided!"
     exit 1
  else

这里使用$ {SERIAL_NO}来获取SERIAL_NO变量。   我想知道$ var和$ {var}之间有什么区别,为什么在这里使用$ {var}。

感谢

3 个答案:

答案 0 :(得分:5)

实际上 是性能上的微小差异。性能差异的原因是大括号启用Parameter Expansion (PE)解析器。没有大括号,shell知道不会执行参数扩展(因为大括号对于PE是必需的)。当想要执行PE时,在变量名称周围使用大括号的唯一原因是消除变量名称与其他文本的歧义,例如var="foo"; echo ${var}name将输出{{1} }。如果没有大括号,shell将尝试扩展名为fooname的变量,该变量不存在。

答案 1 :(得分:1)

如果没有字母数字字符,则没有区别。您的示例中的大括号是不必要的。

"$foo42"$foo42的内容。 "${foo}42"$foo后跟“42”的内容。

答案 2 :(得分:1)

大括号通常用于防止shell扩展并允许背对背变量。但是在这种情况下可能不是严格需要的。