我${VARIABLE}在脚本中看到了很多类型语法。大括号的重点是什么?
小智 10
它界定了变量。
您可能需要 $FOO 作为变量,但需要将其与其他文本连接。如果是这样,这将不起作用:
echo "$FOObar"
Run Code Online (Sandbox Code Playgroud)
这将抱怨没有变量 $FOObar。要解决此问题,请分隔变量:
echo "${FOO}bar"
Run Code Online (Sandbox Code Playgroud)
这将起作用,并打印 $FOO 的值并连接文本 'bar'。
这是人们经常选择做的事情之一,以避免真正需要的问题。这可能是一个好习惯,因为 bash 脚本对语法错误是非常无情的。
@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
Run Code Online (Sandbox Code Playgroud)
变量操作
$ file=filename.txt
$ echo $file
filename.txt
$ echo ${file%.txt} # remove last match of .txt in $file
filename
Run Code Online (Sandbox Code Playgroud)
如果我们没有为变量引用明确设置分隔符,所有这些都会失败(如数组示例中所示)。