echo $BASH_VERSION 和 echo ${BASH_VERSION} 有什么区别?

echo $BASH_VERSION 和 echo ${BASH_VERSION} 有什么区别?

我在脚本中看到了很多${VARIABLE}类型语法。括号有什么用处?

答案1

它限定了变量。

您可能需要 $FOO 作为变量,但需要将其与其他文本连接起来。如果是这样,这将不起作用:

echo "$FOObar"

这会抱怨没有变量 $FOObar。为了解决这个问题,请界定变量:

echo "${FOO}bar"

这将起作用,并打印 $FOO 的值和连接的文本“bar”。

这是人们经常选择一直做的事情之一,以避免真正需要它的问题。这可能是一个好习惯,因为 bash 脚本对语法错误非常不宽容。

答案2

@mauvedeity 是正确的。问题不仅在于,有些字符在变量引用之后写入时被视为该引用的一部分 — 而且有些字符随后被视为不是成为其中的一部分。这会破坏变量操作和数组的使用。

数组

$ foo=( one two three )
$ echo $foo # implied first element with index 0
one
$ echo $foo[1] # this will not work, as [1] is not considered part of variable
one[1]
$ echo ${foo[1]} # this will work
two
$ echo ${foo[*]} # all elements
one two three
$ echo ${#foo[*]} # array length
3
$ echo ${#foo[2]} # length of third element (index 2)
5

变量操作

$ file=filename.txt
$ echo $file
filename.txt
$ echo ${file%.txt} # remove last match of .txt in $file
filename

如果我们没有明确设置变量引用的分隔符,所有这些都将失败(如数组示例所示)。

相关内容