在使用 BASH 编写脚本方面,以下变量之间有什么区别:
$var
"$var"
${var}
"${var}"
和 之间没有区别$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 /
引号中的那些扩展为单个参数,而不是分割成单独的单词。
如果下一个字符可能是变量名的一部分,则该${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'