題 echo $ BASH_VERSION和echo $ {BASH_VERSION}之間有什麼區別?


我看到了很多 ${VARIABLE} 在腳本中鍵入語法。大括號有什麼意義?


2
2017-10-22 09:29


起源




答案:


它分隔變量。

您可能需要$ FOO作為變量,但需要將其與其他文本連接。如果是這樣,這將不起作用:

echo "$FOObar"

這會抱怨沒有變量$ FOObar。要解決此問題,請分隔變量:

echo "${FOO}bar"

這將工作,並打印$ FOO的值與文本'bar'連接。

這是人們經常選擇做的事情之一,以避免真正需要的問題。這可能是一個很好的習慣,因為bash腳本是非常無法容忍的語法錯誤。


10
2017-10-22 09:36





@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

如果我們沒有為變量引用顯式設置分隔符,那麼所有這些都將失敗(如數組示例中所示)。


5
2017-10-22 11:38