21. 双引号(部分引用/简单引用)
引用在 Bash 中非常重要,如果您不理解引用的所有细微差别,您可能会遇到很多麻烦。
首先,让我们举一个不引用的简单例子。 以下两个示例都会产生相同的输出,因为参数之间的多个空格被视为单个空格。
$ echo Hello World
Hello World
$ echo Hello World
Hello World
当你想在字符串中保留空格时,你应该用双引号引起来,如下所示。
$ echo "Hello World"
Hello World
基本上,双引号可以保持文本完整,并且不允许 bash 以空格分割文本并将其视为多个参数。 但是,双引号允许使用 $varname
在引用文本内进行变量替换。
变量赋值
当您为变量赋值时,最好始终对右侧的值加双引号。
下面的内容完全相同,因为右边的值只是一个单词。 但仍然使用引号; 这是一个需要养成的好习惯。
$ USERNAME=ramesh
$ USERNAME="ramesh"
当值中有空格时,必须使用双引号。
$ USERNAME="ramesh natarajan"
如果不使用双引号,bash 会将值 "ramesh"
赋给变量
USERNAME
,并尝试执行命令natarajan
。
$ USERNAME=ramesh natarajan
-bash: natarajan: command not found
双引号内的双引号
如果要在双引号内使用双引号,请使用\
对其进行转义,如下所示。
echo "Hello World"
echo "Hello \"World\""
忽略双引号内 $
的特殊含义
如果您不希望$
符号指示要替换的变量,请使用\
对其进行转义,如下所示:
$ dollar=100
$ echo "This will not escape dollar: $dollar"
This will not escape dollar: 100
$ echo "This will escape dollar: \$dollar"
This will not escape dollar: $dollar
echo
命令显示值,第二个显示文本,因为$
符号已使用\
转义。