引用:字面意思就是将字符串用双引号括起来,保护字符串的特殊字符不被shell解释
引用的一个重要作用就是保护命令行参数不被shell解释
引用可以改掉echo's不换行的"毛病"。
echo $(ls -l) #结果不换行
echo "$(ls -l)" #结果换行
5.1 引用变量
双引号:
双引号中$, `(后置引用),\(转义字符)会继续起作用,而其他特殊字符将不会生效。
使用双引号,可以阻止单词分割。书上下面这个例子,可以解释双引号在控制命令参数中的作用
variable1="a variable containing five words" COMMAND This is $variable1 # 用下面7个参数执行COMMAND命令: # "This" "is" "a" "variable" "containing" "five" "words" COMMAND "This is $variable1" # 用下面1个参数执行COMMAND命令: # "This is a variable containing five words" variable2="" # Empty. COMMAND $variable2 $variable2 $variable2 # COMMAND将不带参数执行. COMMAND "$variable2" "$variable2" "$variable2" # COMMAND将以3个空参数来执行. COMMAND "$variable2 $variable2 $variable2" # COMMAND将以1个参数来执行(2空格).
双引号中使用”\”也可能会出现一些不一致的行为,这个很恶心,我想不用每种都记住,只要记住一种正确的方式就行了
bash$ echo hello\! hello! bash$ echo "hello\!" hello\! bash$ echo -e x\ty xty bash$ echo -e "x\ty" x y
单引号:
单引号是全引用, 所有特殊字符都不会被解释,包括$,`,\。
5.2 转义
一个前面放上转义符 (\)的字符就是告诉shell这个字符按照字面的意思进行解释。
特定的转义符的特殊的含义,echo和sed命令中使用
\n 新行
\r 回车
\t 水平制表符
\v 垂直制表符
\b 后退符号
\a alert
\0xx 转换为8进制ASCII码
转义符也提供续行功能, 也就是编写多行命令的功能,是每行结尾的转义符都会转义换行符, 这样下一行会与上一行一起形成一个命令序列
如果一个脚本以|结束, 管道符, 那么就不用非的加上转义符\了. 但是一个好的编程风格还是应该在行尾加上转义符
浙公网安备 33010602011771号