Categories: Linux

Bash 程式設計教學與範例:單引號、雙引號、跳脫字元

介紹如何在 bash 環境之下處理單引號與雙引號內的跳脫字元問題。

雙引號

在 bash shell 環境之下,雙引號之內的大部分字元都會維持原始字面意義(literal value),但有三種例外狀況:變數($)、雙引號(`) 與跳脫字元(\)。

在雙引號中若遇到 shell 變數會自動展開,替換成變數的內容:

# 展開 $SHELL 變數
echo "SHELL=$SHELL"
SHELL=/bin/bash

若在 bash shell 中遇到兩個反引號包起來的指令,會自動將其替換為該指令執行的結果,而這個行為在雙引號中也是維持不變:

# 替換為指令輸出
echo "PWD=`pwd`"
PWD=/home/ubuntu

亦可使用 $() 這種指令替換的語法:

# 替換為指令輸出
echo "PWD=$(pwd)"
PWD=/home/ubuntu

可以匹配任意文字的萬用字元(*,wildcards)在雙引號中是無效的:

# 自動展開萬用字元
echo /etc/a*.conf
/etc/adduser.conf /etc/apg.conf /etc/appstream.conf
# 萬用字元在雙引號中無效
echo "/etc/a*.conf"
/etc/a*.conf

若需要在雙引號中維持 $`"\ 字元的字面意義,可以加上跳脫字元:

# 維持字面意義
echo "\$ \` \" \\"
$ ` " \

單引號

在 bash shell 環境之下,單引號之內的所有字元都會維持原始字面意義(literal value),並且在單引號之內的文字中不允許包含另外的單引號。

# 單引號內的字元都維持字面意義
echo '\n\t\\ $PATH `pwd` /etc/*.conf'
\n\t\\ $PATH `pwd` /etc/*.conf

如果需要在單引號之內的文字中加入實際的單引號,有幾種做法,第一種是把單引號 ' 替換成 '"'"'

# 單引號內包含單引號
echo 'You'"'"'re welcome.'
You're welcome.

'"'"' 的意義就是把原始的字串分成兩段(最前面與最後面的單引號),然後中間再加入一個以雙引號包起來的單引號。

另外一種方式則是將中間以雙引號包起來的單引號,替換成跳脫字元的形式,這樣比較容易閱讀:

# 單引號內包含單引號
echo 'You'\''re welcome.'
You're welcome.

以下是雙引號與單引號的行為比較表。

雙引號 單引號
變數 $ 有作用 無作用
萬用字元 * 無作用 無作用
指令替換 ` 有作用 無作用

$'string'

在以錢字號開頭的單引號中,若遇到跳脫字元(\),就會依照 ANSI C 標準被替換為代表的字元:

# 套用標準 ANSI C 跳脫字元
echo $'You\'re\nwelcome.'
You're
welcome.

參考資料

Share
Published by
Office Guide
Tags: Bash

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

11 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

11 個月 ago