-
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
.
- \"
-
表示引号(")的字面意思
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 file_list="/bin/cat /bin/gzip /bin/more /usr/bin/less /usr/bin/emacs-20.7" |
转义符也提供了写一个多行命令的手段。一般地,每个单独的行有一个不同的命令,而在一行末尾的转义符转义新行符,命令序列则由下一行继续。
1 (cd /source/directory && tar cf - . ) | \ |
如果一个脚本行用一个管道线"|"结束行尾,后面可以再跟一个不必一定要的转义符"\"。然而,好的编程习惯最好加上一个转义符“\”。 |
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提示写成的例子.