引号的含义就是这样,用引号将字符串括起来。这样做可以保护字符串中的特殊字符不被 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 指出这一点。 |