- 論壇徽章:
- 1
|
edsionte 發(fā)表于 2012-02-07 21:22 ![]()
無人回復(fù)么。 先看看反引號內(nèi)部的結(jié)果。
外面沒有被引號引起來的backslash,\,符號在Bash當(dāng)中是escape character,作用是保留了下一個(gè)字符的字面含義。注意,僅僅是\后的一個(gè)字符。作出這種解析的是Bash,而不是echo程序。- $ echo \z
- z
- # 這里好理解吧,\z被Bash解析為z,然后echo就直接顯示啦
- $ echo \\z
- \z
- # 上面的\\被Bash解釋為\,而z就是z啦
- $ echo \\\z
- \z
- # 上面的\\被Bash解析為\,然后\z被解析為z,連起來就是\z啦
- $ echo \\\\z
- \\z
- # 上面的\\被Bash解析為\,然后后面兩個(gè)\\被解析為\,然后就是z,然后連起來就是\\z
- $ echo \\\\\\z
- \\\z
- # 情況類似,\和它后面的一個(gè)字符組合,保留它后面一個(gè)字符的字面意義,得到\\\,然后最后是z,最后連起來就是\\\z
- $ echo \\\\\\\z
- \\\z
- # 上面的也是,\\\\\\被Bash解釋為\\\,然后是\z被解釋為z,最后連起來就是\\\z,然后交給echo就直接顯示啦,
- # 上面的所有echo顯示都會在后面追加一個(gè)換行的
復(fù)制代碼 上面的只是讓你知道沒有被引號(單引號,雙引號,反引號)引起來的backslash在Bash當(dāng)中的解析。如果是被引號(雙引號和反引號,除了單引號,單引號里面是什么就是什么,Bash不會重新過濾)引起來的backslash,
在Bash當(dāng)中是這么解析的,如果backslash后面的一個(gè)字符是dollar, backtick, double quote, backslash or newline,這個(gè)前導(dǎo)的backslash將被Bash移除(從輸入流當(dāng)中就處理了),而dollar,backtick,double quote,backslash or newline將保留它們本身的含義。
再來看看你的例子,外層echo顯示需要獲取輸入顯示的內(nèi)容,由于你的例子里面有反引號,所以Bash先在input stream當(dāng)中進(jìn)行過濾一遍。這里是你的輸入:- echo `echo \z` # z
- echo `echo \\z` # z
- echo `echo \\\z` # \z
- echo `echo \\\\z` # \z
- echo `echo \\\\\\z` # \z
- echo `echo \\\\\\\z` # \\z
復(fù)制代碼 過濾后- echo `echo \z`
- # 上面的前導(dǎo)\沒有移除,因?yàn)閦不屬于dollar, backtick, double quote, backslash or newline當(dāng)中
- echo `echo \z`
- # \\當(dāng)中的前導(dǎo)\被移除
- echo `echo \\z`
- # \\當(dāng)中的前導(dǎo)被移除,\z不變
- echo `echo \\z`
- # \\\\兩個(gè)前導(dǎo)被移除,得到\\,z就是z,連接起來是\\z
- echo `echo \\\z`
- # 移除三個(gè)前導(dǎo),得到\\\z
- echo `echo \\\\z`
- # 移除三個(gè)前導(dǎo),得到\\\,然后后面是\z,不變,連起來是\\\\z
復(fù)制代碼 執(zhí)行反引號里面的echo,這里按照帖子開頭說的escape character進(jìn)行解析,然后就是你要的結(jié)果了。- $ echo \z
- z
- $ echo \z
- z
- $ echo \\z
- \z
- $ echo \\z
- \z
- $ echo \\\z
- \z
- $ echo \\\\z
- \\z
復(fù)制代碼 主要還是要分清楚escape character以及引號當(dāng)中的backslash的區(qū)別,這個(gè)就容易理解了。escape character一律對后面的字符保留字面意思,而引號(除單引號)當(dāng)中的backslash碰到后面是
dollar, backtick, double quote, backslash or newline五種字符時(shí),Bash會把前導(dǎo)的backslash移除,后面的那個(gè)字符保留原本含義。
上面部分是一些個(gè)人理解,不對之處,還望指正。
|
|