引号的特殊效果就是,保护字符串中的特殊字符不被shell 或者是shell 脚本重新解释或者扩展.
(这里所说的”特殊”指的是一些字符在shell 中具有的特殊意义,比如*)

在我们一般的生活中,引号内的内容往往有特殊的含义,而在Bash 中,当我们引用一个字符串,
我们是保护它的字面含义.

引用还可以抑制 echo 命令的换行作用.

例:

%E6%9C%AA%E5%91%BD%E5%90%8D2.jpg

在一个双引号中直接使用变量名,一般都是没有问题的.它阻止了所有在引号中的特殊字符的
重新解释–包括变量名[2]–但是$,`和\除外.[3]保留$,作为特殊字符的意义,是为了能够在双
引号中也能够正常地引用变量(“$var”).这样在”"中可以使用变量所表达的

使用”"来防止单词分割.[4]如果在参数列表中使用双引号,将使得双引号中的参数作为一个参
数.即使双引号中的字符串包含多个单词(也就是包含空白部分),也不会变为多个参数

[cce]
variable1="a variable containing five words"
COMMAND This is $variable1 # COMMAND 将以7 个参数来执行
# "This" "is" "a" "variable" "containing" "five" "words"
COMMAND "This is $variable1" # COMMAND 将以1 个参数来执行
# "This is a variable containing five words"
variable2="" # 空值
COMMAND $variable2 $variable2 $variable2 # COMMAND 将不带参数执行
COMMAND "$variable2" "$variable2" "$variable2" # COMMAND 将以3 个空参数来执行
COMMAND "$variable2 $variable2 $variable2" # COMMAND 将以1 个参数来执行(2 空
格)
[/cce]

下面有个诡异的变量IFS

%E6%9C%AA%E5%91%BD%E5%90%8D3.jpg










单引号操作总体上和”"很像,但不允许引用变量.因为$的特殊含义被关闭了.在”中除了’,其他
字符都没有特殊的含义了.所以单引号比双引号严格.
因为即使是\,在”中都被关闭了,所以你想在”中显示’的含义,将得不到预期的效果.

如果在”"中包含”!”的话,在命令行中将会出现错误.因为这个”!”被当作历史命令来解释了.
在一个脚本中,这种情况是不会发生的,因为在脚本中,Bash 历史记录被关闭了.

下边是一些关于”\”一些不协调的行为.
bash$ echo hello\!
hello!
bash$ echo “hello\!”
hello\!
bash$ echo -e x\ty
xty
bash$ echo -e “x\ty”
x y