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命令显示值,第二个显示文本,因为$符号已使用\转义。