什么';shell脚本中${varname}和$varname之间的区别是什么
我有一个简单的问题,但我想知道什么';shell脚本中${varname}和$varname之间的区别是什么,shell,unix,Shell,Unix,我有一个简单的问题,但我想知道${varname}和$varname之间的区别是什么 我同时使用这两种方法,但我看不出有什么区别可以告诉我何时使用这两种方法。它们在基本情况下是相同的,但使用${varname}可以更好地控制和处理变量。它还跳过可能造成混淆的边缘情况。最后,它支持变量扩展,如中所述: “$”字符引入参数扩展,命令 替换,或算术展开。要删除的参数名称或符号 可以用大括号括起来,大括号是可选的,但用于 立即保护要展开的变量不包含字符 可解释为名称的一部分 使用大括号时,匹配的结束大括
${varname}
和$varname
之间的区别是什么
我同时使用这两种方法,但我看不出有什么区别可以告诉我何时使用这两种方法。它们在基本情况下是相同的,但使用
${varname}
可以更好地控制和处理变量。它还跳过可能造成混淆的边缘情况。最后,它支持变量扩展,如中所述:
“$”字符引入参数扩展,命令
替换,或算术展开。要删除的参数名称或符号
可以用大括号括起来,大括号是可选的,但用于
立即保护要展开的变量不包含字符
可解释为名称的一部分
使用大括号时,匹配的结束大括号是第一个“}”,而不是第一个“}”
通过反斜杠或在带引号的字符串中转义,而不是在
嵌入式算术扩展、命令替换或参数
扩张
参数扩展的基本形式是${parameter}。价值
参数被替换。参数为a时需要大括号
具有多个数字的位置参数,或当参数为
后跟一个不能被解释为其内容一部分的字符
名字
让我们看一个基本的例子。在这里,${}
的使用允许我们做一些简单的$
做不到的事情。我们想写<代码> $MyVa/代码> +<代码> BLABLA“< /代码>::
$myvar=23
$echo$myvar
23
$echo$Myvarbla
在变量名中使用{}
,有助于在执行变量扩展时消除歧义
考虑两个变量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
:
可以使用${name[subscript]}引用数组的任何元素。
需要大括号以避免与路径名扩展冲突。
当变量后面有东西时,区别就变得很重要:
text="House"
plural="${text}s"
如果没有大括号,shell会将文本
视为变量名,这是行不通的
当您使用扩展语法指定默认值(${name default}
)、未定义时显示错误(${name?error}
)或模式替换(;它适用于BASH,但大多数也适用于KSH)时,大括号也是必需的
相关的:
正确,但不完整。参见fedorqui+1的帖子,这个问题似乎只是问,如果没有其他参数扩展语法需要大括号,为什么要使用大括号。
text="House"
plural="${text}s"
> echo $name-default
-default
> echo ${name-default}
default