在shell中引号分为三种:单引号、双引号、倒引号。
1.双引号:
由双引号括起来的字符(除KaTeX parse error: Expected 'EOF', got '\)' at position 13: 、倒引号(、)和反斜线(\̲)̲外)均作为普通字符对待。这三个…表示变量替换,即用预先指定的变量值代替KaTeX parse error: Expected 'EOF', got '\仅' at position 19: …;倒引号`表示命令替换;反斜线\̲仅̲当其后的字符是“”,“`”,“ " ”," "或换行符之一是,“\”才是转义字符。转移字符告诉其后面的那个字符进行特殊处理,知识当做普通字符。
双引号的作用实例:
$cat ex3
echo "current directory is ‘pwd’ "
echo "home directory is
H
O
M
E
"
e
c
h
o
"
d
i
r
e
c
t
o
r
y
′
HOME" echo "directory '
HOME"echo"directory′HOME’ "
$ ex3
current directory is /home/mengqc/prog
home directory is /home/mengqc
file*.?
directory ‘/home/mengqc’
有脚本ex3看出,第一个echo语句中,在双引号括起来的字符串中包括’pwd’。执行该语句时,先执行倒引号括起来的命令pwd,并将结果代替’pwd’。从而得到输出结果的第一行。
第二个echo语句中,双引号中有
H
O
M
E
,
执
行
时
先
以
H
O
M
E
环
境
变
量
的
值
代
替
HOME,执行时先以HOME环境变量的值代替
HOME,执行时先以HOME环境变量的值代替HOME,然后显示整个参数字符串。
第三echo语句中,双引号中的字符都作为普通字符出现,所以执行结果如输出的第三行所示。
第四个echo语句中,双引号中有’
H
O
M
E
′
,
此
时
,
单
引
号
仍
作
为
普
通
字
符
出
现
,
而
HOME',此时,单引号仍作为普通字符出现,而
HOME′,此时,单引号仍作为普通字符出现,而HOME表示引用过HOME的值。因而执行结果如输出的第四行所示。
2.单引号:
单引号括起来的字符都作为普通字符出现。例如:
$str='echo “directory is $HOME” ’
$ echo $str
echo “directory is $HOME”
其结果是把字符串“echo "directory is
H
O
M
E
"
‘
作
为
整
体
赋
给
变
量
s
t
r
。
由
于
使
用
了
单
引
号
,
所
以
命
令
名
e
c
h
o
及
HOME"‘作为整体赋给变量str。由于使用了单引号,所以命令名echo及
HOME"‘作为整体赋给变量str。由于使用了单引号,所以命令名echo及HOME都作为普通字符,失去其原有的特殊意义。
又如:
$echo ‘The time is date
,the file is $HOME/abc’
The time is date
, the file is $HOME/abc
可见,echo命令行中被单引号括起来的所有字符都照原样显示出来,特殊字符也失去原来的意义。
3.倒引号
倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行官该命令行,并以它的标准输出结果取代整个倒引号部分。在前面实例中已经见过。例如:
$echo cuttent directory is pwd
current directory is /home/mengqc
shell执行此命令时,先执行pwd
中的命令pwd,将输出结果/home/mengqc取代pwd
这一部分,最后输出替换后的整个结果。
利用倒引号的这种功能可以进行命令置换,即把倒引号括起来的命令的执行结果赋给执行变量。例如:
$today=date
$echo Today is $today
Today is 2016年 04月 02日 星期六 09:38:39 CST
又如:
$users=who|wc-1
$echo The number of users is $users
The number of users is 5
可以看出,进行命令置换时,倒引号中可以是单条命令或多个命令的组合,如管道线等。另外,倒引号还可以嵌套使用。但应注意,嵌套使用时内层的倒引号必须用反斜线()将其转义。例如:
$Number =echo The number of users is \
who|wc-1`$echo $Nuser The number of users is 5 如果内层倒引号不用其转义形式,而直接以原型出现在该字符串中,写成如下形式: $Number1=
echo The number of users is who|wc-1
`
回车后,将出现:
0
接着输出:
$echo $Nuser1
将显示一个空行。这表明,它没有按我们想想的情况执行。
反斜线()是转义字符,它能把特殊字符变成普通字符。