国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
SHELL十三問之四:雙引號與單引號差別在哪
-
-

還是回到我們的command line來吧...

經(jīng)過前面兩章的學(xué)習(xí),應(yīng)該很清楚當(dāng)你在shell prompt后面敲打鍵盤、直到按下Enter的時候,你輸入的文字就是command line了,然后shell才會以行程的方式執(zhí)行你所交給它的命令。但是,你又可知道:你在command line輸入的每一個文字,對shell來說,是有類別之分的呢?


簡單而言(我不敢說這是精確的定議,注一)command line的每一個charactor,分為如下兩種:
* literal:也就是普通純文字,對shell來說沒特殊功能。
* meta:對shell來說,具有特定功能的特殊保留字符。


(注一:關(guān)于bash shell在處理command line時的順序說明,請參考O'Reilly出版社之Learning the Bash Shell, 2nd Edition,第177 - 180頁的說明,尤其是178頁的流程圖Figure 7-1 ... )

Literal沒甚么好談的,凡舉abcd123456這些"文字"都是literal ... (easy?)

meta卻常使我們困惑..... (confused?)

事實(shí)上,前兩章我們在command line中已碰到兩個幾乎每次都會碰到的meta
* IFS:由<space><tab><enter>三者之一組成(我們常用space )。
* CR:由<enter>產(chǎn)生。


IFS是用來拆解command line的每一個詞(word)用的,因?yàn)?/span>shell command line是按詞來處理的。而CR則是用來結(jié)束command line用的,這也是為何我們敲<enter>命令就會跑的原因。除了IFSCR,常用的meta還有:
=設(shè)定變量。
$作變量或運(yùn)算替換(請不要與shell prompt搞混了)。
>:重導(dǎo)向(重定向)stdout。
<:重導(dǎo)向(重定向)stdin。
|命令管線(管道)。
&:重導(dǎo)向file desCRiptor,或?qū)⒚钪糜诒尘?/span>(后臺)執(zhí)行。
( ):將其內(nèi)的命令置于nested subshell執(zhí)行,或用于運(yùn)算或命令替換。
{ }:將其內(nèi)的命令置于non-named function中執(zhí)行,或用在變量替換的界定范圍。
;:在前一個命令結(jié)束時,而忽略其返回值,繼續(xù)執(zhí)行下一個命令。
&&:在前一個命令結(jié)束時,若返回值為true,繼續(xù)執(zhí)行下一個命令。
||:在前一個命令結(jié)束時,若返回值為false,繼續(xù)執(zhí)行下一個命令。
!:執(zhí)行history列表中的命令
...

 

假如我們需要在command line中將這些保留字符的功能關(guān)閉的話,就需要quoting處理了。

bash中,常用的quoting有如下三種方法:
* hard quote' ' (單引號),凡在hard quote中的所有meta均被關(guān)閉。
* soft quote" " (雙引號),在soft quoe中大部份meta都會被關(guān)閉,但某些則保留($,反引號,反斜杠)。
* escape\(反斜線),只有緊接在escape (跳脫字符)之后的單一meta才被關(guān)閉。

下面的例子將有助于我們對quoting的了解:

$ A=B C       #空格鍵未被關(guān)掉,作為IFS處理。
$ C: command not found.
$ echo $A

$ A="B C"       #空格鍵已被關(guān)掉,僅作為空格鍵處理。
$ echo $A
B C

在第一次設(shè)定A變量時,由于空格鍵沒被關(guān)閉,command line將被解讀為:

* A=B然后碰到<IFS>,再執(zhí)行C命令在第二次設(shè)定A變量時,由于空格鍵被置于soft quote中,因此被關(guān)閉,不再作為IFS
* A=B<space>C事實(shí)上,空格鍵無論在soft quote還是在hard quote中,均會被關(guān)閉。Enter鍵亦然:

 

$ A='B
> C
> '
$ echo "$A"
B
C
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
linux shell中的單引號與雙引號的區(qū)別(看完就不會有引號的疑問了)
shell轉(zhuǎn)義,單引號與雙引號,反撇號
shell特殊字符匯總
sed 使用變量替換和執(zhí)行外部命令
學(xué)習(xí) shell腳本之前的基礎(chǔ)知識
Shell中的引用
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服