bash shell基本语法之单引号、双引号和倒引号的区别及使用

1,200 阅读1分钟

前言

bash shell基本语法之特殊变量的使用的一些示例中,使用echo输出一些字符串的时候,既使用了单引用也用了双引号,这篇博文简单说下这两个的区别,顺便说下倒引号的用法

单引号与双引号

在使用echo输出字符串的时候, 会用引号(单/双引号)将字符串括起来,在没有特殊字符如$等的时候,只是普通文本内容,使用单/双引号没有区别,下面说下不同的地方。

单引号

如果字符串中存在$等特殊字符,想要作为普通字符原样输出就使用单引号,这样就不会把$后面的字符中作为变量解释输出

双引号

在对待$等特殊字符上,刚好和单引号的处理相反,比如对于$紧跟的字符串作为引用的变量解释

示例

#! /bin/bash
describe="this is a demo"
#单引号输出,特殊字符不处理
echo 'I want to say $describe, current path: `pwd`'
#双引号输出,特殊字符处理
echo "I want to say $describe, current path: `pwd`"

执行结果:

总之,单引号会把其中的一些特殊字符串作为普通字符对待,双引号解释这些特殊字符,如变量替换

p.s. : 对于反斜线的处理,在使用echo命令的时,反斜线或者说这些转义字符怎么处理,是由echo命令决定的,而不是单/双引号。也就是说,echo命令默认配置,对于反斜线,单/双引号处理结果一样,因为和echo配置有关。

下面是使用man命令查看echo的文档的一部分:

对于使用echo命令是否解释字符串中的反斜线,是由-e/-E这两个选项决定的。

如下:

#! /bin/bash
describe="this is a demo"
#单引号输出,特殊字符不处理
echo 'I want to say $describe,\t  current path: `pwd`'
#双引号输出,特殊字符处理
echo "I want to say $describe,\t  current path: `pwd`"

执行结果如下:\t处理的结果一样,都被转义了,不同的版本默认配置不一样,我在另一个版本上尝试是都没被转义:

倒引号

键盘数字1左边那个键按下的这个符号:`。

上面的示例中已经用到了,在执行pwd命令的时候。所以它的作用是用命令结果代替命令本身,然后用来操作,比如上面的想在字符串获取pwd的结果进行打印。

和``命令效果一样的是使用$(),例如想在一个已经由倒引号``包括的命令中,再嵌套执行一个命令,是不允许直接嵌套可以使用$()相互嵌套,如下:

#! /bin/bash
pwd
path=`pwd`
echo "path: $path"
echo "echo path: `echo 'path is '$(pwd)`"

注意最后一行代码,在字符串中执行echo命令,然后在echo输出的字符串中执行pwd命令,执行结果如下: