哪种形式更适合在Bash中使用?

Kyr*_*rol 3 bash quoting

我正在学习Bash,我看到了这个形式

C =示例

回声"$ C"

给出相同的表格结果

C = "示例"

echo $ C.

我想知道是否更好地将""放在变量的赋值中或者在$之后.或者如果它无动于衷.或者如果一个人认为比另一个人"更美丽".

Ada*_*man 5

如果您确定变量的值是单个单词(没有空格),则可以使用$varname${varname}.如果你不能保证这一点,那么你应该使用"$varname""${varname}".请注意,bash在解释命令之前会进行分词,因此如果不引用表达式,实际上可能会出现语法错误,例如

C="white space"
if [ -z $C ]
then
  ...
fi
Run Code Online (Sandbox Code Playgroud)

将导致语法错误:

-bash: [: white: binary operator expected
Run Code Online (Sandbox Code Playgroud)

虽然这很好:

C="white space"
if [ -z "$C" ]
then
  ...
fi
Run Code Online (Sandbox Code Playgroud)

这是因为在第一个未引用的情况下变量扩展后bash看到了这样的事实:

if [ -z white space ]
then
  ...
fi
Run Code Online (Sandbox Code Playgroud)

并且-z运算符只需要一个,而不是两个参数.在第二个,引用案例bash看到这个:

if [ -z "white space" ]
then
  ...
fi
Run Code Online (Sandbox Code Playgroud)

即只需要一个参数.另请注意,引号用于赋值

C="white space"
Run Code Online (Sandbox Code Playgroud)

因为如果你写的话它也会产生错误

C=white space
Run Code Online (Sandbox Code Playgroud)

因为这意味着:执行space包含添加变量的环境的命令C=white.

因此,通常您应该引用这些表达式,以确保您的代码对不可预见的变量值更加健壮.如果变量值来自输入,文件等,则尤其如此.通常可以放弃整数变量的引号,或者只想显示变量的值echo $C.