shell中三種引用方式的區(qū)分

學(xué)習(xí)了shell的展開(kāi)方式后,我認(rèn)識(shí)到shell 提供了一種叫做引用的機(jī)制,來(lái)有選擇地禁止不需要的展開(kāi)。
首先是引用的第一種類型,雙引號(hào)。如果你把文本放在雙引號(hào)中,shell 使用的特殊字符,除了 $,\ (反斜杠),和 ‘(倒引號(hào))之外,則失去它們的特殊含義,被當(dāng)作普通字符來(lái)看待。這意味著單詞分割,路徑名展開(kāi),波浪線展開(kāi)和花括號(hào)展開(kāi)都被禁止,然而參數(shù)展開(kāi),算術(shù)展開(kāi),和命令替換仍然執(zhí)行。使用雙引號(hào),我們可以處理包含空格的文件名。阻止單詞分割,得到期望的結(jié)果;進(jìn)一步,我們甚至可以修復(fù)破損的文件名。
單詞分割被禁止,內(nèi)嵌的空格也不會(huì)被當(dāng)作界定符,它們成為參數(shù)的一部分。一旦加上雙引號(hào),我們的命令行就包含一個(gè)帶有一個(gè)參數(shù)的命令。
來(lái)看一個(gè)有趣的例子:
jeremy@ubuntu:~$ echo $(cal)
十月 2015 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
jeremy@ubuntu:~$ echo "$(cal)"
十月 2015
日 一 二 三 四 五 六
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
其次是單引號(hào),如果需要禁止所有的展開(kāi),我們使用單引號(hào)。在此注意是禁止所有展開(kāi)。
以下例子是無(wú)引用,雙引號(hào),和單引號(hào)的比較結(jié)果:
jeremy@ubuntu:/tmp/abc$ echo $(ls -l $(which cp)) $((2+5)) $USER {1..3}
-rwxr-xr-x 1 root root 124932 1月 14 2015 /bin/cp 7 jeremy 1 2 3
jeremy@ubuntu:/tmp/abc$ echo "$(ls -l $(which cp)) $((2+5)) $USER {1..3}"
-rwxr-xr-x 1 root root 124932 1月 14 2015 /bin/cp 7 jeremy {1..3}
jeremy@ubuntu:/tmp/abc$ echo '$(ls -l $(which cp)) $((2+5)) $USER {1..3}'
$(ls -l $(which cp)) $((2+5)) $USER {1..3}
最后是轉(zhuǎn)義字符。適用于只想引用單個(gè)字符時(shí)。我們可以在字符之前加上一個(gè)反斜杠,在這個(gè)上下文中叫做轉(zhuǎn)義字符。
經(jīng)常在雙引號(hào)中使用轉(zhuǎn)義字符,來(lái)有選擇地阻止展開(kāi)。使用轉(zhuǎn)義字符來(lái)消除文件名中一個(gè)字符的特殊含義,是很普遍的。例如,在文件名中可能使用一些對(duì)于 shell 來(lái)說(shuō),有特殊含義的字符。這些字符包括 “$”, ”?‘, ” ” 等字符。
在文件名中包含特殊字符,你可以這樣做:
jeremy@ubuntu:/tmp/abc$ echo $(ls -l $USER)
-rw-rw-r-- 1 jeremy jeremy 0 10月 25 16:28 $USER
jeremy@ubuntu:/tmp/abc$ echo $(ls -l !)
-rw-rw-r-- 1 jeremy jeremy 0 10月 25 12:10 !
jeremy@ubuntu:/tmp/abc$ echo $(ls -l !)
bash: !: event not found
注意在單引號(hào)中,反斜杠失去它的特殊含義,它被看作普通字符。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容