亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 6732 | 回復(fù): 12
打印 上一主題 下一主題

[學(xué)習(xí)共享] 關(guān)于echo和\的疑問 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-02-06 13:45 |只看該作者 |倒序?yàn)g覽
本帖最后由 edsionte 于 2012-02-13 14:41 編輯

有如下的腳本:
$cat /tmp/test_echo.sh
#!/bin/bash

set -x
echo `echo \z`        #  z
echo `echo \\z`       #  z
echo `echo \\\z`      # \z
echo `echo \\\\z`     # \z
echo `echo \\\\\\z`   # \z
echo `echo \\\\\\\z`  # \\z

結(jié)果在bash下運(yùn)行是:
$/tmp/test_echo.sh
++ echo z
+ echo z
z
++ echo z
+ echo z
z
++ echo '\z'
+ echo '\z'
\z
++ echo '\z'
+ echo '\z'
\z
++ echo '\z'
+ echo '\z'
\z
++ echo '\\z'
+ echo '\\z'
\\z

各位大俠,請問:

1.上述幾條命令的內(nèi)部echo是如何處理\的?

我知道這里用到了轉(zhuǎn)義,但是不清楚具體如何轉(zhuǎn)義的?

如果將上述的反引號換成$(),那么結(jié)果又如下(同在bash下):

++ echo z
+ echo z
z
++ echo '\z'
+ echo '\z'
\z
++ echo '\z'
+ echo '\z'
\z
++ echo '\\z'
+ echo '\\z'
\\z
++ echo '\\\z'
+ echo '\\\z'
\\\z
++ echo '\\\z'
+ echo '\\\z'
\\\z

2.反引號和$()為什么會在該例子中產(chǎn)生不同結(jié)果?

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2012-02-07 21:22 |只看該作者
無人回復(fù)么。

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
3 [報(bào)告]
發(fā)表于 2012-02-11 13:58 |只看該作者
edsionte 發(fā)表于 2012-02-07 21:22
無人回復(fù)么。
先看看反引號內(nèi)部的結(jié)果。
外面沒有被引號引起來的backslash,\,符號在Bash當(dāng)中是escape character,作用是保留了下一個(gè)字符的字面含義。注意,僅僅是\后的一個(gè)字符。作出這種解析的是Bash,而不是echo程序。
  1. $ echo \z
  2. z
  3. # 這里好理解吧,\z被Bash解析為z,然后echo就直接顯示啦
  4. $ echo \\z
  5. \z
  6. # 上面的\\被Bash解釋為\,而z就是z啦
  7. $ echo \\\z
  8. \z
  9. # 上面的\\被Bash解析為\,然后\z被解析為z,連起來就是\z啦
  10. $ echo \\\\z
  11. \\z
  12. # 上面的\\被Bash解析為\,然后后面兩個(gè)\\被解析為\,然后就是z,然后連起來就是\\z
  13. $ echo \\\\\\z
  14. \\\z
  15. # 情況類似,\和它后面的一個(gè)字符組合,保留它后面一個(gè)字符的字面意義,得到\\\,然后最后是z,最后連起來就是\\\z
  16. $ echo \\\\\\\z
  17. \\\z
  18. # 上面的也是,\\\\\\被Bash解釋為\\\,然后是\z被解釋為z,最后連起來就是\\\z,然后交給echo就直接顯示啦,
  19. # 上面的所有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)行過濾一遍。這里是你的輸入:
  1. echo `echo \z`        #  z
  2. echo `echo \\z`       #  z
  3. echo `echo \\\z`      # \z
  4. echo `echo \\\\z`     # \z
  5. echo `echo \\\\\\z`   # \z
  6. echo `echo \\\\\\\z`  # \\z
復(fù)制代碼
過濾后
  1. echo `echo \z`   
  2. # 上面的前導(dǎo)\沒有移除,因?yàn)閦不屬于dollar, backtick, double quote, backslash or newline當(dāng)中
  3. echo `echo \z`   
  4. # \\當(dāng)中的前導(dǎo)\被移除
  5. echo `echo \\z`   
  6. # \\當(dāng)中的前導(dǎo)被移除,\z不變
  7. echo `echo \\z`   
  8. # \\\\兩個(gè)前導(dǎo)被移除,得到\\,z就是z,連接起來是\\z
  9. echo `echo \\\z`
  10. # 移除三個(gè)前導(dǎo),得到\\\z
  11. echo `echo \\\\z`
  12. # 移除三個(gè)前導(dǎo),得到\\\,然后后面是\z,不變,連起來是\\\\z
復(fù)制代碼
執(zhí)行反引號里面的echo,這里按照帖子開頭說的escape character進(jìn)行解析,然后就是你要的結(jié)果了。
  1. $ echo \z
  2. z
  3. $ echo \z
  4. z
  5. $ echo \\z
  6. \z
  7. $ echo \\z
  8. \z
  9. $ echo \\\z
  10. \z
  11. $ echo \\\\z
  12. \\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è)人理解,不對之處,還望指正。


論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2012-02-13 11:31 |只看該作者
回復(fù) 2# edsionte


    謝謝L_kernel,好幾天的疑問終于明白了。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2012-02-13 11:33 |只看該作者
回復(fù) 3# L_kernel


    我再問一下,像“如果是被引號(雙引號和反引號,除了單引號,單引號里面是什么就是什么,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將保留它們本身的含義!边@種規(guī)則在哪里可以看到? 謝謝。

論壇徽章:
145
技術(shù)圖書徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11獅子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龍
日期:2014-01-08 15:26:12技術(shù)圖書徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [報(bào)告]
發(fā)表于 2012-02-13 12:11 |只看該作者
回復(fù) 5# edsionte

shell 十三問?
4) " "(雙引號) 與 ' '(單引號)差在哪?   

論壇徽章:
13
15-16賽季CBA聯(lián)賽之同曦
日期:2016-01-28 19:52:032015亞冠之北京國安
日期:2015-10-07 14:28:19NBA常規(guī)賽紀(jì)念章
日期:2015-05-04 22:32:03處女座
日期:2015-01-15 19:45:44卯兔
日期:2014-10-28 16:17:14白羊座
日期:2014-05-24 15:10:46寅虎
日期:2014-05-10 09:50:35白羊座
日期:2014-03-12 20:52:17午馬
日期:2014-03-01 08:37:27射手座
日期:2014-02-19 19:26:54子鼠
日期:2013-11-30 09:03:56獅子座
日期:2013-09-08 08:37:52
7 [報(bào)告]
發(fā)表于 2012-07-05 09:37 |只看該作者
不錯(cuò)的總結(jié) O_o

論壇徽章:
21
白羊座
日期:2013-08-23 15:49:17金牛座
日期:2013-10-08 17:00:03處女座
日期:2013-10-12 11:54:11CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34午馬
日期:2013-11-27 14:07:21巨蟹座
日期:2013-12-04 10:56:03水瓶座
日期:2013-12-04 15:58:00亥豬
日期:2014-05-24 16:02:3115-16賽季CBA聯(lián)賽之遼寧
日期:2016-11-07 13:52:53戌狗
日期:2013-08-23 16:15:31白羊座
日期:2013-08-24 21:59:24巨蟹座
日期:2013-08-25 16:34:24
8 [報(bào)告]
發(fā)表于 2012-07-05 11:48 |只看該作者
學(xué)習(xí)了.  O-o

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2012-07-05 11:57 |只看該作者
這東西好像不同系統(tǒng),不同的shell效果還不太一樣,用的時(shí)候不行就多加幾個(gè)都試試就好了;

--不要bs我不求甚解

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2012-07-05 17:40 |只看該作者
不錯(cuò),學(xué)習(xí)了
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP