为了账号安全,请及时绑定邮箱和手机立即绑定

我们什么时候需要shell变量的大括号?

我们什么时候需要shell变量的大括号?

炎炎设计 2019-06-24 10:06:23
我们什么时候需要shell变量的大括号?在shell脚本中,我们何时使用{}当展开变量的时候?例如,我看到了以下情况:var=10        # Declare variableecho "${var}" # One use of the variableecho "$var"   # Another use of the variable是有很大的不同,还是只是风格?一个比另一个更好吗?
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

在这个特殊的例子中,它没有什么区别。但是,{}在……里面${}如果要展开变量,则此方法非常有用。foo在弦中

"${foo}bar"

"$foobar"将展开由foobar.

在下列情况下也无条件地需要花括号:

  • 展开数组元素,如

    ${array[42]}

  • 使用参数展开操作,如

    ${filename%.*}

    (移除分机)
  • 将位置参数扩展到9之后:

    "$8 $9 ${10} ${11}"

在任何地方都这样做,而不是仅仅在可能不明确的情况下,能,会,可以被认为是好的编程实践。这既是为了一致性,也是为了避免像$foo_$bar.jpg,从视觉上看,下划线是否成为变量名的一部分并不明显。


查看完整回答
反对 回复 2019-06-24
?
jeck猫

TA贡献1909条经验 获得超7个赞

变量被声明并赋值$没有{}..你必须用

var=10

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

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

这有时让我感到困惑-在其他语言中,我们以同样的方式引用变量,不管它是在赋值的左边还是右边。但是shell脚本是不同的,$var=10不会像你想的那样做!


查看完整回答
反对 回复 2019-06-24
?
慕斯王

TA贡献1864条经验 获得超2个赞

你用{}为了分组。取消引用数组元素需要大括号。例子:

dir=(*)           # store the contents of the directory into an arrayecho "${dir[0]}"  # get the first entry.echo "$dir[0]"    
# incorrect


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 1589 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信