和echo,sed连用时:

\n

表示新行
\r

表示回车
\t

表示水平的制表符
\v

表示垂直的制表符
\b

表示后退符
\a

表示“警告”(蜂鸣或是闪动)
\0xx

翻译成ASCII码为八进制0xx所表示的字符

例子 5-2. 转义字符

1 #!/bin/bash 
  
 2 # escaped.sh: 转义字符 
  
 3 
  
 4 echo; echo 
  
 5 
  
 6 echo "\v\v\v\v" # 打印出 \v\v\v\v literally. 
  
 7 # 用带着选项-e的'echo'会打印出转义字符串. 
  
 8 echo "=============" 
  
 9 echo "VERTICAL TABS" 
  
 10 echo -e "\v\v\v\v" # 打印四个垂直的制表符. 
  
 11 echo "==============" 
  
 12 
  
 13 echo "QUOTATION MARK" 
  
 14 echo -e "\042" # 打印出字符" (引号, 它的八进制ASCII码为42). 
  
 15 echo "==============" 
  
 16 
  
 17 # 当使用像$'\X'的结构时,-e选项是多余的. 
  
 18 echo; echo "NEWLINE AND BEEP" 
  
 19 echo $'\n' # 新行. 
  
 20 echo $'\a' # 警告 (蜂鸣). 
  
 21 
  
 22 echo "===============" 
  
 23 echo "QUOTATION MARKS" 
  
 24 # 版本2开始Bash已经允许使用$'\nnn'结构了. 
  
 25 # 注意在这里,'\nnn'表示一个八进制的值. 
  
 26 echo $'\t \042 \t' # Quote (") framed by tabs. 
  
 27 
  
 28 # 使用$'\xhhh'结构也可以使用十六进制数来转义. 
  
 29 echo $'\t \x22 \t' # Quote (") framed by tabs. 
  
 30 # 多谢Greg Keraunen指出这个.. 
  
 31 # 早期的Bash版本允许用'\x022'.(译者注,现在不行了) 
  
 32 echo "===============" 
  
 33 echo 
  
 34 
  
 35 
  
 36 # 用ASCII码值把字符赋给变量. 
  
 37 # ---------------------------------------- 
  
 38 quote=$'\042' # 引号"被赋给变量quote了. 
  
 39 echo "$quote This is a quoted string, $quote and this lies outside the quotes." 
  
 40 
  
 41 echo 
  
 42 
  
 43 # 用连串的ASCII码把一串字符赋给变量.. 
  
 44 triple_underline=$'\137\137\137' # 137是字符'_'的ASCII码. 
  
 45 echo "$triple_underline UNDERLINE $triple_underline" 
  
 46 
  
 47 echo 
  
 48 
  
 49 ABC=$'\101\102\103\010' # 101, 102, 103分别是A, B, C字符的八进制ASCII码. 
  
 50 echo $ABC 
  
 51 
  
 52 echo; echo 
  
 53 
  
 54 escape=$'\033' # 033是ESC的ASCII码的八进制值 
  
 55 echo "\"escape\" echoes as $escape" 
  
 56 # 不可见的输出. 
  
 57 
  
 58 echo; echo 
  
 59 
  
 60 exit 0 
  


参考扩展结构$' '的另外一个例子xample 34-1. 
  
\" 
  

表示引号(")的字面意思 
  
 1 echo "Hello" # Hello 
  
 2 echo "\"Hello\", he said." # "Hello", he said. 
  

\$ 
  

表示美元符($)的字面意思(如果在\$跟上变量名将不会引用变量的值) 
  
 1 echo "\$variable01" # 输出是$variable01 
  

\\ 
  

表示反斜杠(\)的字面意思 
  
 1 echo "\\" # 输出是\ 
  
 2 
  
 3 # 然而 . . . 
  
 4 
  
 5 echo "\" # 在命令行,这句将会打印SP2变量值(译者注:变量SP2是输入未完成提示符),并要求你继续输入.. 
  
 6 # 在脚本文件里, 这句会出错. 
  

反斜杠的作用要看它是否是自我转义,被引用,或出现在命令替换结构或是在here document里. 1 # 简单的转义和引用 
  
 2 echo \z # z 
  
 3 echo \\z # \z 
  
 4 echo '\z' # \z 
  
 5 echo '\\z' # \\z 
  
 6 echo "\z" # \z 
  
 7 echo "\\z" # \z 
  
 8 
  
 9 # 命令替换 
  
 10 echo `echo \z` # z 
  
 11 echo `echo \\z` # z 
  
 12 echo `echo \\\z` # \z 
  
 13 echo `echo \\\\z` # \z 
  
 14 echo `echo \\\\\\z` # \z 
  
 15 echo `echo \\\\\\\z` # \\z 
  
 16 echo `echo "\z"` # \z 
  
 17 echo `echo "\\z"` # \z 
  
 18 
  
 19 # Here document 
  
 20 cat <<EOF 
  
 21 \z 
  
 22 EOF # \z 
  
 23 
  
 24 cat <<EOF 
  
 25 \\z 
  
 26 EOF # \z 
  
 27 
  
 28 # 这些例子由Stéphane Chazelas提供..



一个字符串赋给变量时里面的组成部分可能会被转义,但如果单独一个转义字符(\)是不能赋给变量的。

1 variable=\ 
  
 2 echo "$variable" 
  
 3 # 不能工作 - 给出一个错误信息: 
  
 4 # test.sh: : command not found 
  
 5 # 单独一个转义字符是不能正确地赋给变量的. 
  
 6 # 
  
 7 # 那上面语句究竟发生了什么呢?实际上转义符"\"转义了新行符, 
  
 8 #+ 产生的作用如同 variable=echo "$variable" 
  
 9 #+ 而这是无效的变量赋值 
  
 10 
  
 11 variable=\ 
  
 12 23skidoo 
  
 13 echo "$variable" # 23skidoo 
  
 14 # 这样就能工作,因为第二行的变量赋值是有效的 
  
 15 # 
  
 16 
  
 17 variable=\ 
  
 18 # \^ 转义后面的空格(译者注:粗心的读者一定要注意上面最后的空格) 
  
 19 echo "$variable" # 空格 
  
 20 
  
 21 variable=\\ 
  
 22 echo "$variable" # \ 
  
 23 
  
 24 variable=\\\ 
  
 25 echo "$variable" 
  
 26 # 不能工作 - 产生一个错误: 
  
 27 # test.sh: \: command not found 
  
 28 # 
  
 29 # 第一个\转义第二个\,结果只剩单独的第三个\字符, 
  
 30 #+ 这样又会发生上面的情况. 
  
 31 
  
 32 variable=\\\\ 
  
 33 echo "$variable" # \\ 
  
 34 # 第二和第四个\字符被转义. 
  
 35 # 这样不会出错了.




转义一个空格可以防止一个字符串参数被分割成多个命令行参数。

1 file_list="/bin/cat /bin/gzip /bin/more /usr/bin/less /usr/bin/emacs-20.7" 
  
 2 # 文件列表作为参数传递给命令. 
  
 3 
  
 4 # 再加两个参数给命令ls,一同列出文件信息. 
  
 5 ls -l /usr/X11R6/bin/xsetroot /sbin/dump $file_list 
  
 6 
  
 7 echo "-------------------------------------------------------------------------" 
  
 8 
  
 9 # 如果我们转义上面的一对空格会发生什么? 
  
 10 ls -l /usr/X11R6/bin/xsetroot\ /sbin/dump\ $file_list 
  
 11 # 出错: 开头的三个文件名被连成一个文件名并传递给了命令'ls -l' 
  
 12 # 因为两个转义字符禁止了空格分割参数的作用。



转义符也提供了写一个多行命令的手段。一般地,每个单独的行有一个不同的命令,而在一行末尾的转义符转义新行符,命令序列则由下一行继续。

1 (cd /source/directory && tar cf - . ) | \ 
  
 2 (cd /dest/directory && tar xpvf -) 
  
 3 # 把Alan Cox目录树全部复制到另外一个目录里, 
  
 4 # 但分为两行可以增加可读性. 
  
 5 
  
 6 # 你也可以用下面的命令达到一样的效果: 
  
 7 tar cf - -C /source/directory . | 
  
 8 tar xpvf - -C /dest/directory 
  
 9 # 看看下面的注释. 
  
 10 # (多谢,Stéphane Chazelas.)



如果一个脚本行用一个管道线"|"结束行尾,后面可以再跟一个不必一定要的转义符"\"。然而,好的编程习惯最好加上一个转义符“\”。

1 echo "foo 
  
 2 bar" 
  
 3 #foo 
  
 4 #bar 
  
 5 
  
 6 echo 
  
 7 
  
 8 echo 'foo 
  
 9 bar' # 没什么不同. 
  
 10 #foo 
  
 11 #bar 
  
 12 
  
 13 echo 
  
 14 
  
 15 echo foo\ 
  
 16 bar # 新行符被转义. 
  
 17 #foobar 
  
 18 
  
 19 echo 
  
 20 
  
 21 echo "foo\ 
  
 22 bar" # 还是一样,字符\在弱引用中还是被解释为转义字符 
  
 23 #foobar 
  
 24 
  
 25 echo 
  
 26 
  
 27 echo 'foo\ 
  
 28 bar' # 由于转义符"\"在强引用符里,所以只能解释为字面上的意思 
  
 29 #foo\ 
  
 30 #bar 
  
 31 
  
 32 # 由Stéphane Chazelas提示写成的例子.