国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
轉義
userphoto

2010.03.03

關注
高級Bash腳本編程指南: 一本深入學習shell腳本藝術的書籍

5.2. 轉義

轉義是一種引用單個字符的方法.一個前面放上轉義符(\)的字符就是告訴shell這個字符按照字面的意思進行解釋,換句話說, 就是這個字符失去了它的特殊含義.

在某些特定的命令和工具中, 比如echosed, 轉義符往往會起到相反效果 - 它反倒可能會引發(fā)出這個字符的特殊含義.

特定的轉義符的特殊的含義

echosed命令中使用

\n

表示新的一行

\r

表示回車

\t

表示水平制表符

\v

表示垂直制表符

\b

表示后退符

\a

表示"alert"(蜂鳴或者閃爍)

\0xx

轉換為八進制的ASCII碼, 等價于0xx


例子 5-2. 轉義符

  1 #!/bin/bash
2 # escaped.sh: 轉義符

4 echo; echo

6 echo "\v\v\v\v" # 逐字的打印\v\v\v\v.
7 # 使用-e選項的'echo'命令來打印轉義符.
8 echo "============="
9 echo "VERTICAL TABS"
10 echo -e "\v\v\v\v" # 打印4個垂直制表符.
11 echo "=============="
12 
13 echo "QUOTATION MARK"
14 echo -e "\042" # 打印" (引號, 8進制的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\'是8進制的值.
26 echo $'\t \042 \t' # 被水平制表符括起來的引號(").
27 
28 # 當然,也可以使用16進制的值,使用$'\xhhh' 結構.
29 echo $'\t \x22 \t' # 被水平制表符括起來的引號(").
30 # 感謝, Greg Keraunen, 指出了這點.
31 # 早一點的Bash版本允許'\x022'這種形式.
32 echo "==============="
33 echo
34 
35 
36 # 分配ASCII字符到變量中.
37 # ----------------------------------------
38 quote=$'\042' # " 被賦值到變量中.
39 echo "$quote This is a quoted string, $quote and this lies outside the quotes."
40 
41 echo
42 
43 # 變量中的連續(xù)的ASCII字符.
44 triple_underline=$'\137\137\137' # 137是八進制的'_'.
45 echo "$triple_underline UNDERLINE $triple_underline"
46 
47 echo
48 
49 ABC=$'\101\102\103\010' # 101, 102, 103是八進制碼的A, B, C.
50 echo $ABC
51 
52 echo; echo
53 
54 escape=$'\033' # 033 是八進制碼的esc.
55 echo "\"escape\" echoes as $escape"
56 # 沒有變量被輸出.
57 
58 echo; echo
59 
60 exit 0

參考例子 34-1,這是關于$' '字符串擴展結構的一個例子.

\"

表示引號字面的意思

  1 echo "Hello"                  # Hello
2 echo "\"Hello\", he said." # "Hello", he said.

\$

表示$本身子面的含義(跟在\$后邊的變量名將不能引用變量的值)

  1 echo "\$variable01"  # 結果是$variable01

\\

表示反斜線字面的意思

  1 echo "\\"  # 結果是\

3 # 反之 . . .

5 echo "\" # 如果從命令行調(diào)用的話, 會出現(xiàn)SP2, 也就是2級提示符(譯者注: 提示你命令不全, 在添加一個"就好了.
6  # 如果在腳本中調(diào)用的話, 那么會報錯.

\的行為依賴于它自身是否被轉義, 被引用(""), 或者是否出現(xiàn)在命令替換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

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 # 這些例子是由Stephane Chazelas所提供的.

賦值給變量的字符串的元素也會被轉義, 但是不能把一個單獨的轉義符賦值給變量.

  1 variable=\
2 echo "$variable"
3 # 不能正常運行 - 會報錯:
4 # test.sh: : command not found
5 # 一個"裸體的"轉義符是不能夠安全的賦值給變量的.
6 #
7 # 事實上在這里"\"轉義了一個換行符(變成了續(xù)航符的含義),
8 #+ 效果就是 variable=echo "$variable"
9 #+ 不可用的變量賦值
10 
11 variable=\
12 23skidoo
13 echo "$variable" # 23skidoo
14  # 這句是可以的, 因為
15  #+ 第2行是一個可用的變量賦值.
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 # 第一個轉義符把第2個\轉義了,但是第3個又變成"裸體的"了,
30 #+ 與上邊的例子的原因相同.
31 
32 variable=\\\\
33 echo "$variable" # \\
34  # 第2和第4個反斜線被轉義了.
35  # 這是正確的.

轉義一個空格會阻止命令行參數(shù)列表的"單詞分割"問題.

  1 file_list="/bin/cat /bin/gzip /bin/more /usr/bin/less /usr/bin/emacs-20.7"
2 # 列出的文件都作為命令的參數(shù).

4 # 加兩個文件到參數(shù)列表中, 列出所有的文件信息.
5 ls -l /usr/X11R6/bin/xsetroot /sbin/dump $file_list

7 echo "-------------------------------------------------------------------------"

9 # 如果我們將上邊的兩個空個轉義了會產(chǎn)生什么效果?
10 ls -l /usr/X11R6/bin/xsetroot\ /sbin/dump\ $file_list
11 # 錯誤: 因為前3個路徑被合并成一個參數(shù)傳遞給了'ls -l'
12 # 而且兩個經(jīng)過轉義的空格組織了參數(shù)(單詞)分割.

轉義符也提供續(xù)行功能, 也就是編寫多行命令的功能.一般的, 每一個單獨行都包含一個不同的命令,但是每行結尾的轉義符都會轉義換行符,這樣下一行會與上一行一起形成一個命令序列.

  1 (cd /source/directory && tar cf - . ) | \
2 (cd /dest/directory && tar xpvf -)
3 # 重復Alan Cox的目錄數(shù)拷貝命令,
4 # 但是分成兩行是為了增加可讀性.

6 # 也可以使用如下方式:
7 tar cf - -C /source/directory . |
8 tar xpvf - -C /dest/directory
9 # 察看下邊的注意事項.
10 # (感謝, Stephane Chazelas.)

如果一個腳本以|結束, 管道符, 那么就不用非的加上轉義符\了. 但是一個好的編程風格, 還是應該在行尾加上轉義符.

  1 echo "foo
2 bar"
3 #foo
4 #bar

6 echo

8 echo 'foo
9 bar' # 沒什么區(qū)別.
10 #foo
11 #bar
12 
13 echo
14 
15 echo foo\
16 bar # 換行符被轉義.
17 #foobar
18 
19 echo
20 
21 echo "foo\
22 bar" # 與上邊一樣, \在部分引用中還是被解釋為續(xù)行符.
23 #foobar
24 
25 echo
26 
27 echo 'foo\
28 bar' # 由于是全引用, 所以\沒有被解釋成續(xù)行符.
29 #foo\
30 #bar
31
32 # 由Stephane Chazelas所建議的用例.
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
shell之轉義字符
shell編程追加1 - 張繼飛的日志 - 網(wǎng)易博客
Python3 字符串 | 菜鳥教程
轉義字符 ios
批處理系列(1)
PHP 單引號與雙引號的區(qū)別
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服