- 论坛徽章:
- 0
|
本帖最后由 xiaopan3322 于 2011-05-12 18:07 编辑
也可参看:http://scmbob.org/can_u_comprehend_it.html
最初是一个朋友告诉我他在Hadoop的配置脚本中看到了这么一句话:hello=$"${@// /\ }"
仔细研究了一下,发现还挺有意思,有兴趣的一起来看看吧。
脚本:
- #!/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}"
复制代码 输出:
- [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
复制代码 脚本另存为 "test, 以下两种情况运行:
1: run as ./test "a b c d"
2: run as ./test a b c d
下面是我的分析,如有不对的地方,希望大家可以指出来
1 #!/bin/bash
2 echo -e "\n"
3 echo $"1" #1, 仅输出数字1; 2, 输出数字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" #""的作用很明显,使\不需要转义
7
8 hello=${@// /\\ } #1, 没有$"", 将空格替换为\+空格: a\ b\ c\ d; 2, output: a b c d
9 echo -e "\n$hello" #没有"",此时\需要\\转义
10
11 echo -e "\n"
12 hello=${@// /\ } #由于没有$"", \没有转义,空格替换空格,output不变, 1同2: a b c d
13 echo -e "\n$hello"
14
15 echo -e "\n"
#将数字2替换为Hi Bob,因为没有数字2, 所以1同2: a b c d
16 echo $"${@//\$"2"/Hi Bob}"
#将输入的第二个参数替换为Hi Bob,由于"a b c d"合起来属于第一个参数,所以1输出: a b c d, 2输出: a Hi Bob c d
17 echo $"${@//$2/Hi Bob}" |
评分
-
查看全部评分
|