第五章. 引号

目录
5.1. 变量引用
5.2. 转义

引号的含义就是这样,用引号将字符串括起来。这样做可以保护字符串中的特殊字符不被 shell 或 shell 脚本重新解释或扩展。(如果一个字符具有除字面意义之外的其他解释,则该字符是“特殊”的。例如,星号 *通配符扩展正则表达式中表示通配符。)

bash$ ls -l [Vv]*
-rw-rw-r--    1 bozo  bozo       324 Apr  2 15:05 VIEWDATA.BAT
 -rw-rw-r--    1 bozo  bozo       507 May  4 14:25 vartrace.sh
 -rw-rw-r--    1 bozo  bozo       539 Apr 14 17:11 viewdata.sh

bash$ ls -l '[Vv]*'
ls: [Vv]*: No such file or directory

某些程序和实用程序会重新解释或扩展带引号字符串中的特殊字符。引号的一个重要用途是保护命令行参数免受 shell 的影响,但仍允许调用程序对其进行扩展。

bash$ grep '[Ff]irst' *.txt
file1.txt:This is the first line of file1.txt.
 file2.txt:This is the First line of file2.txt.

请注意,未加引号的grep [Ff]irst *.txt在 Bash shell 下可以工作。[1]

引号还可以抑制 echo 对换行符的 “胃口”

bash$ echo $(ls -l)
total 8 -rw-rw-r-- 1 bo bo 13 Aug 21 12:57 t.sh -rw-rw-r-- 1 bo bo 78 Aug 21 12:57 u.sh


bash$ echo "$(ls -l)"
total 8
 -rw-rw-r--  1 bo bo  13 Aug 21 12:57 t.sh
 -rw-rw-r--  1 bo bo  78 Aug 21 12:57 u.sh

注意

[1]

除非有名为以下内容的文件first在当前工作目录中。这是又一个需要引用的原因。(感谢 Harald Koenig 指出这一点。