簡體   English   中英

Shell腳本中的$ {varname}和$ varname有什么區別

[英]What's the difference between ${varname} and $varname in a shell scripts

我有一個簡單的問題,但我想知道${varname}$varname什么區別?

我同時使用了兩者,但看不出有什么區別可以告訴我何時使用其中一個。

在變量名稱中使用{}有助於消除執行變量擴展時的歧義。

考慮兩個變量varvarname 讓我們看一下您想要將字符串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

當某些變量跟隨變量時,區​​別變得很重要:

text="House"
plural="${text}s"

沒有花括號,外殼程序將把texts視為變量名,這是行不通的。

當您使用擴展語法指定默認值( ${name-default} ),未定義時顯示錯誤( ${name?error} )或模式替換時,花括號也是必需的( 有關其他模式請參閱本文 ;適用於BASH)但大多數也適用於KSH)

> echo $name-default
-default
> echo ${name-default}
default

有關:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM