我有一個簡單的問題,但我想知道${varname}
和$varname
之間有什麼區別?
我同時使用,但我沒有看到任何區別,可以告訴我什麼時候使用一個或另一個。
我有一個簡單的問題,但我想知道${varname}
和$varname
之間有什麼區別?
我同時使用,但我沒有看到任何區別,可以告訴我什麼時候使用一個或另一個。
變量名中使用{}
有助於擺脫不確定性的同時進行變量擴展。
考慮兩個變量var
和varname
。讓我們看看你想追加字符串name
到變量var
。您不能說$varname
,因爲這會導致變量varname
的擴展。但是,說${var}name
將幫助您達到預期的結果。
$ var="This is var variable."
$ varname="This is varname variable."
$ echo $varname
This is varname variable.
$ echo ${var}name
This is var variable.name
當訪問數組的任何元素時,也需要大括號。
$ a=(foo bar baz) # Declare an array
$ echo $a[0] # Accessing first element -- INCORRECT
foo[0]
$ echo ${a[0]} # Accessing first element -- CORRECT
foo
從info bash
報價:
Any element of an array may be referenced using ${name[subscript]}.
The braces are required to avoid conflicts with pathname expansion.
它們在基本情況下是相同的,但是使用${varname}
可以提供更多的控制權並且能夠使用變量。它還會跳過可能造成混淆的邊緣案例。最後,它使變量擴展爲Shell Parameter Expansion描述:
的「$」字符引入參數擴展,命令 取代或算術擴展。 擴展的參數名稱或符號可以用大括號括起來,這些大括號是可選的,但可用於 保護變量從緊跟其後的字符 擴展,這可以被解釋爲名稱的一部分。
當使用大括號,括號結束所述匹配是所述第一「}」不 由反斜槓或引用字符串內逃脫,而不是一個 嵌入算術擴展,命令替換,或參數內 膨脹。
參數擴展的基本形式是$ {parameter}。 參數的值被替換。當參數是一個 位置參數與多個數字時,或者當參數是 後跟一個不被解釋爲 名稱的一部分的字符時,需要使用大括號。
我們來看一個基本的例子。在這裏,使用${}
允許我們做一些簡單的$
不做的事情。考慮到我們想寫$myvar
+ "blabla"
::
$ myvar=23
$ echo $myvar
23
$ echo $myvarblabla
<--- the variable $myvarblabla doesn't exist!
$ echo ${myvar}blabla
23blabla
的區別就變得很重要的東西如下的變量時:
text="House"
plural="${text}s"
如果沒有括號,外殼會看到texts
變量名,其止跌」工作。
大括號也是必要的,當你使用擴展語法來指定默認值(${name-default}
),顯示錯誤未定義時(${name?error}
),或模式替換(see this article for other patterns;它是BASH但KSH大部分的工作,以及)
> echo $name-default
-default
> echo ${name-default}
default
相關:
真實的,但我ncomplete。查看來自fedorqui的帖子 – gentoomaniac
+1這個問題似乎只是問如果沒有其他參數擴展語法需要它們,爲什麼要使用大括號。 – chepner