Linux Bash 中的字元轉義


摘要

字元用於原始碼、命令列和大多數計算機互動中。然而,大多數字符無法透過標準鍵盤上的按鍵表示,許多甚至無法讀取。另一類字元是複雜的控制字元。

在本教程中,我們將討論 Bash 中的字元轉義。我們將首先簡要概述計算機如何表示字元。首先,我們檢查 Bash 中的各種字串型別。然後,將詳細描述僅在 Bash 中的字元轉義。

注意 − Linux 命令區分大小寫。

Bash 中的字串

由於鍵盤上的每個符號都不能用一個鍵來表示,因此字元的寫入和儲存是兩個不同的過程。Bash 使用字串來儲存文字。實際上,Bash 中的所有變數本質上都是字元字串。通常,它們由單引號或雙引號括起來的直序列組成。

我們在一種上下文中解釋或推斷特定的字元組合,而在另一種上下文中則按字面意思理解它們,這兩種方法之間的一個關鍵區別。

單引號

在 Bash 中使用單引號 (') 的主要目的是保持每個字元的字面值。當您希望輸入保留其字面值而沒有任何資料插值時,請使用單引號來提取字元的任何特殊值。當您不想使用跳脫字元來更改 Bash 如何理解輸入字串時,單引號是一個有用的替代方案。

$ text='a $(echo b) c'
$ echo "${text}"
a $(echo b) c

請注意單引號如何保持內容完整。不執行任何插值,但結果是,我們也無法在任何時候將一個單引號放在另一個單引號內。

雙引號

當允許歷史擴充套件時,雙引號 (") 保持所有字元的字面值,除了 ($)、(')、(")、() 和 (!) 字元。

$ text="a"
$ text="${text} $(echo "b") c"
$ echo "${text}"
a b c

最初,我們單獨使用 [a] 鍵將字元直接分配給文字。接下來,使用 ${text} 變數擴充套件獲取其值。該 $在此句子中被翻譯。最後,我們將此值與表示式和另一個字元連線起來,並將其分配迴文本。

Bash 中的字元轉義

在 Bash 中具有特定含義的字元必須在單引號之外進行轉義,才能保持其字面值。實際上,這主要透過使用反斜槓跳脫字元來實現。有時我們可能需要使用替代技術。

讓我們檢查何時以及如何使用每種方法。

1.雙引號

雙引號 () 內的反斜槓字元僅在後跟 ($)、(')、(")、() 或換行符時才具有特定含義。如果在雙引號內在其後使用任何這些字元,則反斜槓不會出現在輸出中。如果反斜槓出現在其前面,則雙引號在雙引號之間是可以接受的。要轉義雙引號字串內的文字,我們在字元前面新增反斜槓字元。

$ text1="a $(echo b) c"
$ text2="a \$(echo b) c"
$ echo "${text1}"
a b c
$ echo "${text2}"
a $(echo b) c

在上面的示例中,請檢視美元符號如何在 text2 中被轉義,以便它保留其字面含義,同時失去其特殊功能

無引號

正如我們已經證明的那樣,放棄引號會帶來一定的成本。為了使任何無引號的序列統一,以下字元都必須進行轉義:逗號、句點、下劃線、加號、冒號、商業@、百分號、斜槓和連字元。

$ text=a\ \&\ b\ \&\ c
$ echo "${text}"
a & b & c

作為良好的實踐,最好不要使用引號。

結論

在本教程中,我們討論了 Bash 中的字元轉義。我們首先了解了各種字元編碼表。此外,我們觀察到某些字元僅用作命令或標記文字,無法列印。我們需要一種方法來避免使用此類字元,以便按字面意思使用它們。我們查看了純 Bash 以及 Bash 中的一些常見內建字元轉義情況。

本教程演示瞭如何在 bash 中使用單引號和雙引號,並闡明瞭它們之間的區別。一旦您瞭解了這些區別,您應該能夠告訴 shell 如何讀取輸入字串,以及是按原樣輸出輸入還是插值資料。

更新於: 2023年4月4日

205 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告