- Linux自動化運維:Shell與Ansible(微課版)
- 楊寅冬主編
- 1290字
- 2024-07-26 17:04:23
1.2.6 轉義符
在計算機科學與遠程通信中,當將轉義符放在字符序列中時,它將對其后續的幾個字符進行替代并解釋。通常,可以通過上下文判定某字符是否為轉義符。轉義符即標志著轉義序列開始的那個字符。
轉義序列通常有兩種功能。第一種功能是編碼無法用字母表直接表示的特殊數據;第二種功能是表示無法直接通過鍵盤輸入的字符(如回車符)。
本節說的轉義符就對應第二種功能,即將轉義符自身和后面的字符看作一個整體,表示某種含義。常見的示例是用反斜線“\”作為轉義符,表示那些不可打印的ASCII控制符。另外,在統一資源標識符(Uniform Resource Identifier,URI)中,請求串中的一些符號有特殊含義,也需要轉義,轉義符使用百分號“%”。

V1-6 轉義符
在日常工作中經常會遇到轉義符,如在Shell中刪除文件時,如果文件名中有星號“*”,則需要轉義,使用了轉義符后,“*”就能作為文件名使用了。
rm access_log* # 刪除當前目錄下文件名以access_log開頭的文件 rm access_log\* # 刪除當前目錄下文件名為access_log*的文件
又如,在雙引號中又使用雙引號時就需要轉義,轉義之后才能正常表示雙引號,否則會報語法錯誤。例如:
printf "This is a string with \"double quotes\" inside it.\n"
輸出結果如下。
This is a string with "double quotes" inside it.
1. 反斜線
在Shell中,反斜線(\)是一個特殊字符,用于改變一些字符的含義。例如,可以使用反斜線來輸出特殊字符,或者將特殊字符視為普通字符。
Shell中有很多元字符,如果要查找星號(*)、加號(+)、問號(?)本身,而不是元字符,則需要對其進行轉義。常見的轉義序列如表1-9所示。
表1-9 常見的轉義序列

使用以下命令輸出一個反斜線字符:
echo "\\"
輸出結果如下。
\
反斜線也可以用來輸出其他特殊字符,如使用以下命令輸出換行符:
echo -e "Hello\nWorld"
輸出結果如下。
Hello World
使用以下命令輸出一個水平制表符:
echo -e "Hello\tWorld"
輸出結果如下。
Hello World
2. 反引號
在Shell中,反引號(`)用于標識被執行的命令,并且命令的輸出會替換反引號中的內容,這稱為命令替換。
使用命令替換將命令的輸出賦給一個變量:
foo=`date` echo $foo Mon Jan 9 15:16:27 CST 2023
使用命令替換在其他命令中包含命令的輸出:
echo Today is `date` Today is Thu Nov 23 05:33:29 PM CST 2023
如果將命令的輸出用作另一個命令的參數,或者將命令的輸出賦給一個變量以供腳本中以后使用,則命令替換可能很有用。注意,反引號字符和單引號(')字符不同,單引號用于標識應該被當作字面值處理的字符串,而不對其進行任何解釋或替換。
3. 雙引號
在Shell中,雙引號(")是一種特殊的字符,用于標識帶有變量或轉義符的字符串。雙引號作為轉義符時,可以方便地在字符串中輸出變量的值,以及輸出特殊字符。
使用雙引號時,變量名會被替換為變量的值,而轉義符會按照其原來的意義被解釋。例如:
name="John" echo "My name is $name" echo "This is a \"quote\""
輸出結果如下。
My name is John This is a "quote"
在雙引號內,如果需要輸出雙引號本身,則可以使用反斜線(\)將其轉義。例如:
echo "This is a \"quote\""
輸出結果如下。
This is a "quote"
4. 單引號
在Shell中,單引號(')是一種特殊的字符,用于標識字符串,其中的內容不會被解釋。單引號作為轉義符時,可以方便地保留字符串中的內容。
使用單引號時,變量名和轉義符都不會被替換或解釋。例如:
name="John" echo 'My name is $name' echo 'This is a \"quote\"'
輸出結果如下。
My name is $name This is a \"quote\"
如果需要在單引號內輸出單引號本身,則可以通過組合單引號和雙引號實現。例如:
echo 'This is a '"'"'quote'"'"''
輸出結果如下。
This is a 'quote'