字符加引号
许多字符对 Shell 都有特殊的含义。 有时您需要隐藏该含义。 括起字符串的单引号(')和双引号(")或单个字符之前的反斜杠(\)允许您隐藏字符的含义。
所有字符(除单引号括起的外)逐字地操作,并且除去任何特殊含义。 因此,命令:
stuff='echo $? $*; ls * | wc'将文字串 echo $? $*; ls * | wc 赋给变量 stuff。 Shell 不执行 echo、ls 和 wc 命令或展开 $? 和 $* 变量以及星号(*)特殊字符。在双引号中,美元符($)、反引号(`)和双引号(")字符的特殊含义保持有效,而所有其他字符则按字面含义理解。 因此,在双引号中会产生命令和变量替换。 此外,引号不影响作为引用字符串一部分的命令替换中的命令,因此那里的字符保留其特殊含义。
考虑以下顺序:
ls *
file1 file2 file3
message="This directory contains `ls * ` "
echo $message
This directory contains file1 file2 file3这显示命令替换中的星号(*)特殊字符已展开。要在双引号内隐藏美元符号 ($) ,反引号 (`) 和双引号 (") 字符的特殊含义,请在这些字符前添加反斜杠 (\)。 当您不使用双引号时,在带有反斜杠的字符之前,相当于将其放在单引号中。 因此,就在换行字前的反斜杠(即,反斜杠在一行的结尾)将隐藏换行符,并允许您在下一个物理行继续此命令行。