在 Shell 脚本中,何时在扩展变量时{}
例如,我看到了以下内容:
var=10 # Declare variable
echo "${var}" # One use of the variable
echo "$var" # Another use of the variable
是否有显着差异,还是仅仅是样式?是一个比另一个更好的选择吗?
在此特定示例中,没有区别。然而, {}
在${}
如果你想扩展变量是有用的foo
字符串中
"${foo}bar"
因为"$foobar"
会改为扩展foobar
标识的变量。
在以下情况下,也无条件需要花括号:
${array[42]}
${filename%.*}
(删除扩展名)"$8 $9 ${10} ${11}"
在所有地方(而不只是在可能模棱两可的情况下)执行此操作可被视为良好的编程习惯。这既是为了保持一致性,又是为了避免出现类似$foo_$bar.jpg
类的意外情况,在下划线处,下划线成为变量名的一部分并不明显。
声明和分配变量时不带$
和不带{}
。你必须用
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
并没有达到您的想象!
您使用{}
进行分组。需要大括号来取消对数组元素的引用。例子:
dir=(*) # store the contents of the directory into an array
echo "${dir[0]}" # get the first entry.
echo "$dir[0]" # incorrect