3

在使用 BASH 编写脚本方面,以下变量之间有什么区别:

$var
"$var"
${var}
"${var}"
4

2 回答 2

7

和 之间没有区别$var${var}之间没有区别"$var""${var}"只是在某些情况下,当您使用以前的版本时,解析器可能无法识别您的意图。考虑:

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

第一个不打印任何内容,因为未定义echo变量。fooworld第二个打印helloworld是因为 shell 能够确定您正在引用该foo变量。

$var和之间的区别在于"$var"未引用的变量扩展在扩展后由 shell 评估。像这样:

var='ls /'
$var

Lists /,因为在扩展之后,shell 将空间评估为标记分隔符,而

var='ls /'
"$var"

结果是因为在用户环境中没有可用的ls /: No such file or directory命令 named 。ls /

于 2012-04-30T18:37:12.610 回答
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'
于 2012-04-30T18:28:14.443 回答