shell中单引号,双引号,反引号,转义字符

1. 单引号(’)

         由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。如例程中的 '-1 day',再比如:

$ string=’$PATH’

$ echo $string

$PATH

string’和$string’:$后接单引号的$'string',这在bash中被特殊对待:会将某些反斜线序列(如\n,\t,\",\'等)继续转义,而不认为它是字面符号(如果没有$符号,单引号会强制将string翻译为字面符号,包括反斜线)

# echo 'a\nb'

a\nb

# echo $'a\nb'

a

b

 

2. 双引号(”)

         由双引号括起来的字符,除$(美元符号)、\(反斜杠)、`(反引号)和”(双引号),如果开启了感叹号(!)引用历史命令时,感叹号要除外,这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。对于“$”来说,就是用其后指定的变量的值来代替这个变量和$;而对”号,若其前面没有加“\”,则Shell会将它同前一个”号匹配。如例程中的"-$i day",会随着循环,将$i转换成其代表的值。

“string”和$“string”: 如果没有特殊定制bash环境或有特殊需求,$"string"和"string"是完全等价的,使用$""只是为了保证本地化。

 

3. 反引号(`)

         这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(’)混淆。反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。如例程中的`date -d '-1 day' +%Y%m%d`就是把这条命令的结果赋给变量OPDATE。

(1)反引号可以嵌套使用,但需注意,嵌套使用时内层的反引号必须用反斜杠(\)将其转义。例如:

$ abc=`echo The number of users is \`who| wc -l\``

$ echo $abc

The number of users is 2

(2)在反引号之间的命令行中也可以使用shell的特殊字符。Shell为得到``中命令的结果,它实际上要去执行``中指定的命令。执行时,命令中的特殊字符,如$,”,?等又将具有特殊含义,并且``所包含的可以是任何一个合法的Shell命令,如:

$ ls

note readme.txt Notice Unix.dir

$ TestString="`echo $HOME ` ` ls [nN]*`"

$ echo $TestString

/home/yxz note Notice

      反引号是一个老的用法,$()才是新的用法,如例程中的$(seq 10),$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的。实际学习生活汇总,$()都是被推荐的用法,所以上面的的用法可以改成:

$ TestString="$(echo $HOME) $(ls [nN]*)"

$ echo $TestString

/home/yxz note Notice

 

4. 不加引号

      把内容输出出来,可能不会将含有空格的字符串视为一个整体输出,如果内容中有命令,变量等,会先把变量命令解析结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用,不过最好用双引号替代之;

5. 转义字符(\)

         它告诉shell不要对其后面的那个字符进行特殊处理,只当作普通字符即可。可以想见,在双引号中需要在前面加上“\”的只有四个字符$,\,’和”本身。

你可能感兴趣的:(shell)