[英]What does the special form ${varname:-text} do in shell script?
[英]What's the difference between ${varname} and $varname in a shell scripts
我有一個簡單的問題,但我想知道${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}。 參數的值被替換。 當parameter是一個具有多個位數的位置參數時,或者當parameter后跟一個不被解釋為其名稱一部分的字符時,必須使用大括號。
讓我們看一個基本的例子。 在這里,使用${}
可以讓我們做一些簡單的$
不能做的事情。 考慮我們要寫$myvar
+ "blabla"
::
$ myvar=23
$ echo $myvar
23
$ echo $myvarblabla
<--- the variable $myvarblabla doesn't exist!
$ echo ${myvar}blabla
23blabla
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.