2012-04-30 71 views

回答

7

$var${var},并有不同之处在于"$var""${var}"没有什么区别,在某些情况下,解析器可能无法识别您的意图,当你的用户以前的版本没有什么区别。试想一下:

foo=hello 
echo "$fooworld" 
echo "${foo}world" 

第一echo打印什么,因为变量fooworld没有定义。第二个打印helloworld,因为shell能够确定您引用foo变量。

$var"$var"之间的区别在于,扩展之后,shell对未加引号的变量扩展进行评估。作为这样:

var='ls /' 
$var 

解释/,由于膨胀后的壳的计算结果的空间作为令牌分离器,而在ls /: No such file or directory

var='ls /' 
"$var" 

结果,因为没有名为ls /命令是在用户的环境中使用。

+0

感谢您的解释。 – E1Suave

2

引号中的那些被扩展为一个参数,而不是分成单独的单词。

如果下一个字符可能是变量名的一部分,则${var}表示法很有用,例如:"${var}name"

function args() { 
    while [ $# -gt 0 ]; do echo "arg: '$1'"; shift; done 
} 

# var=" a b c" 

# args $var 
arg: 'a' 
arg: 'b' 
arg: 'c' 

# args "$var" 
arg: ' a b c' 
+0

在任何时候都使用** $ {var} **符号不合适吗?这是否会导致问题,或取决于变量是否是命令E.g. ** var = $(echo hi)**或者变量是简单字符串E.g ** var =“hi”**? – E1Suave

+0

“变量是一个命令” - 你的意思是变量被设置为包含命令的*输出*?不,没有区别。它只是一个变量 –

+0

使用'$ {var}'形式总是合适的,除非你认为它会伤害可读性。 – Sorpigal