- 論壇徽章:
- 0
|
本帖最后由 xiaopan3322 于 2011-05-12 18:07 編輯
也可參看:http://scmbob.org/can_u_comprehend_it.html
最初是一個(gè)朋友告訴我他在Hadoop的配置腳本中看到了這么一句話:hello=$"${@// /\ }"
仔細(xì)研究了一下,發(fā)現(xiàn)還挺有意思,有興趣的一起來(lái)看看吧。
腳本:
- #!/bin/bash
- echo $"1"
- echo $1
- hello=$"${@// /\ }"
- echo -e "\n$hello"
- hello=${@// /\\ }
- echo -e "\n$hello"
- hello=${@// /\ }
- echo -e "\n$hello"
- echo $"${@//\$"2"/Hi Bob}"
- echo $"${@//$2/Hi Bob}"
復(fù)制代碼 輸出:
- [Bob@hzling05:~/test]-No.360-$ ./test "a b c d"
- 1
- a b c d
- a\ b\ c\ d
- a\ b\ c\ d
- a b c d
- a b c d
- a b c d
- [Bob@hzling05:~/test]-No.361-$ ./test a b c d
- 1
- a
- a b c d
- a b c d
- a b c d
- a b c d
- a Hi Bob c d
復(fù)制代碼 腳本另存為 "test, 以下兩種情況運(yùn)行:
1: run as ./test "a b c d"
2: run as ./test a b c d
下面是我的分析,如有不對(duì)的地方,希望大家可以指出來(lái)
1 #!/bin/bash
2 echo -e "\n"
3 echo $"1" #1, 僅輸出數(shù)字1; 2, 輸出數(shù)字1
4 echo $1 #1, output: a b c d; 2, output: a
5
5 hello=$"${@// /\ }" #1, 注意$"", 將空格替換為\+空格: a\ b\ c\ d; 2, output: a b c d
6 echo -e "\n$hello" #""的作用很明顯,使\不需要轉(zhuǎn)義
7
8 hello=${@// /\\ } #1, 沒(méi)有$"", 將空格替換為\+空格: a\ b\ c\ d; 2, output: a b c d
9 echo -e "\n$hello" #沒(méi)有"",此時(shí)\需要\\轉(zhuǎn)義
10
11 echo -e "\n"
12 hello=${@// /\ } #由于沒(méi)有$"", \沒(méi)有轉(zhuǎn)義,空格替換空格,output不變, 1同2: a b c d
13 echo -e "\n$hello"
14
15 echo -e "\n"
#將數(shù)字2替換為Hi Bob,因?yàn)闆](méi)有數(shù)字2, 所以1同2: a b c d
16 echo $"${@//\$"2"/Hi Bob}"
#將輸入的第二個(gè)參數(shù)替換為Hi Bob,由于"a b c d"合起來(lái)屬于第一個(gè)參數(shù),所以1輸出: a b c d, 2輸出: a Hi Bob c d
17 echo $"${@//$2/Hi Bob}" |
評(píng)分
-
查看全部評(píng)分
|