在编写Shell脚本或输入命令时,我们经常看到使用单引号或者双引号,这不仅适用于Shell脚本,而且还适用于所有Bash命令,但是这些引号使用方式之间存在一定的差异,下面我们一起来了解一下它们之间的不同。
一、单引号
用单引号括起来的字符会保留引号内每个字符的字面值,简而言之,由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。
单引号中的任何字符都没有特殊含义,保持引号内所有字符的字面值,即使引号内的\和回车也不例外,但是字符串中不能出现单引号。(注意是所有,只是单引号本身不能够出现在其中)。
示例如下:
1)在/home/xiao/bin创建一个test.sh文件,在文件中添加如下内容
[xiao@hadoop102 bin]$ vim test.sh
#!/bin/bash
do_date=$1
echo '$do_date'
echo '"$do_date"'
图片源于网络,侵删
2)查看执行结果
[xiao@hadoop102 bin]$ test.sh 2019-02-10
$do_date
"$do_date"
小结:单引号不取变量值
二、双引号
双引号类似于单引号,只是它允许Shell解释一些特殊符号,双引号用于保持引号内所有字符的字面值(回车也不例外),但以下情况除外:$加变量名可以取变量的值、反引号仍表示命令替换、\$表示$的字面值、\`表示`的字面值、\"表示"的字面值、\\表示\的字面值,除以上情况之外,在其它字符前面的\无特殊含义,只表示字面值。
示例如下:
1)在/home/xiao/bin创建一个test.sh文件,在文件中添加如下内容:
[xiao@hadoop102 bin]$ vim test.sh
#!/bin/bash
do_date=$1
echo "$do_date"
echo "'$do_date"
2)查看执行结果如下:
[xiao@hadoop102 bin]$ test.sh 2019-02-10
2019-02-10
'2019-02-10'
小结:双引号取变量值
三、反引号
反引号这个字符所对应的键一般位于键盘的左上角,不要将其同单引号混淆。反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。
示例如下:
1)在/home/xiao/bin创建一个test.sh文件,在文件中添加如下内容:
[xiao@hadoop102 bin]$ vim test.sh
#!/bin/bash
echo `date`
2)查看执行结果如下:
[xiao@hadoop102 bin]$ test.sh 2019-02-10
2019年 02月 10日 星期四 21:02:08 CST
小结:反引号执行引号中命令
四、总结
单引号内的内容将原样输出,双引号的作用也是将引号里面的内容输出,但是如果双引号内有命令或者变量,会先对命令进行执行(变量解析取值)得到结果,然后把结果输出。反引号用于命令替换,即对引用的命令进行执行得到结果输出。