• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

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.

參考資料

  • StackOverflow:How to escape single quotes within single quoted strings
  • Bash Hackers Wiki:Quotes and escaping
  • StackExchange:How to use a special character as a normal one in Unix shells?
  • Bash Reference Manual(man bash)。
  • Linux Shell Scripting Tutorial (LSST) v2.0:Quoting

分類:Linux 標籤:Bash

主要資訊欄

搜尋

近期文章

  • Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤
  • Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例
  • Linux 網路設定 ip 指令用法教學與範例
  • Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例
  • Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例
  • Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例
  • Linux 以 Cryptsetup 與 LUKS 加密磁碟教學與範例
  • Linux 使用 age 簡潔的加密、解密工具使用教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide