SHELL十三问之四:双引号与单引号差别在哪?

 

还是回到我们的command line来吧...

Tcxa+|(H3O'}Y1

经过前面两章的学习,应该很清楚当你在shell prompt后面敲打键盘、直到按下Enter的时候,你输入的文字就是command line了,然后shell才会以行程的方式执行你所交给它的命令。但是,你又可知道:你在command line输入的每一个文字,对shell来说,是有类别之分的呢?

.ML)IX�}3dGo U~1


l'@}_`4V$?1
简单而言(我不敢说这是精确的定议,注一)command line的每一个charactor,分为如下两种:
%z�BtQ4/X^B1
* literal:也就是普通纯文字,对shell来说没特殊功能。
qrqQD,s o;U1
* meta:对shell来说,具有特定功能的特殊保留字符。

!n)e}?[1


f7i5CM jz@1q1
(注一:关于bash shell在处理command line时的顺序说明,请参考O'Reilly出版社之Learning the Bash Shell, 2nd Edition,第177 - 180页的说明,尤其是178页的流程图Figure 7-1 ... )
V2J(x-D'w(F)v /"]:`1BSD爱好者乐园?!N�{{];~3pF
Literal没甚么好谈的,凡举abcd123456这些"文字"都是literal ... (easy)

-w.uip.r1

meta却常使我们困惑..... (confused?)

*LBHnk7pU*y%r1

事实上,前两章我们在command line中已碰到两个几乎每次都会碰到的metaBSD爱好者乐园$}7p A V0_,T
* IFS:由<space><tab><enter>三者之一组成(我们常用space )BSD爱好者乐园*d%R&Dz2A y T(ah*P
* CR:由<enter>产生。

{Q` V1D$^�C^1


4vk9[j3@1C1o1
IFS是用来拆解command line的每一个词(word)用的,因为shell command line是按词来处理的。而CR则是用来结束command line用的,这也是为何我们敲<enter>命令就会跑的原因。除了IFSCR,常用的meta还有:BSD爱好者乐园*hg2t'`8}p
=设定变量。
A#/Y onCJ S/|1
$作变量或运算替换(请不要与shell prompt搞混了)BSD爱好者乐园�t{u+r}0`zy
>:重导向(重定向)stdoutBSD爱好者乐园 c6IDX$qW+b(K,QG^
<:重导向(重定向)stdin
0o6V4bdL G d?1
|命令管线(管道)BSD爱好者乐园0U hn)V}|
&:重导向file desCRiptor,或将命令置于背境(后台)执行。
:`(}'a4Wh-_'C&Uf@1
( ):将其内的命令置于nested subshell执行,或用于运算或命令替换。BSD爱好者乐园5gp N+f i'R
{ }:将其内的命令置于non-named function中执行,或用在变量替换的界定范围。
/-Xl2W Y-q;f1
;:在前一个命令结束时,而忽略其返回值,继续执行下一个命令。
a+D/z/}vE E1
&&:在前一个命令结束时,若返回值为true,继续执行下一个命令。
n:U2nu4j/WM6x1K8C1
||:在前一个命令结束时,若返回值为false,继续执行下一个命令。
"cS%]V4n/I)c1
!:执行history列表中的命令BSD爱好者乐园1A.fy0Y`QR
...

-l4j)vceA1

 BSD爱好者乐园H*~e)e!_9S T[5o;b(]

假如我们需要在command line中将这些保留字符的功能关闭的话,就需要quoting处理了。BSD爱好者乐园 Gv(l/nu1T

bash中,常用的quoting有如下三种方法:BSD爱好者乐园`r7wEq-T
* hard quote' ' (单引号),凡在hard quote中的所有meta均被关闭。BSD爱好者乐园I v"h6_/axIm
* soft quote" " (双引号),在soft quoe中大部份meta都会被关闭,但某些则保留($,反引号,反斜杠)BSD爱好者乐园y0m$}"xW-s&Z)N
* escape/(反斜线),只有紧接在escape (跳脱字符)之后的单一meta才被关闭。
/D-FU0rO L*w-xa1BSD爱好者乐园KFc)[N-yH
下面的例子将有助于我们对quoting的了解:BSD爱好者乐园%t }F,Ar+j1WG

BSD爱好者乐园7/8eS4I*/B+u[F

 

$ A=B C       #空格键未被关掉,作为IFS处理。
F|/`$^/S5wM1
$ C: command not found.
%s%eG|G!]:cC1
$ echo $ABSD爱好者乐园 e}%V `!iK
BSD爱好者乐园n8qf%D`/Q FN
$ A="B C"       #空格键已被关掉,仅作为空格键处理。BSD爱好者乐园4l3xl!J^F f:{B
$ echo $A
A pIO$eW1
B CBSD爱好者乐园*]2D2`4lvG

BSD爱好者乐园-c~^-A+O6ic _/Up

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值