- 论坛徽章:
- 0
|
原帖由 yourminmin 于 2007-4-4 17:31 发表 ![]()
但是16楼出现空格的问题还没有解决,我也遇到了类似的问题,
$IFS=";"
$read A
;;;;a;b;c
$echo $A
结果是:
a b c
对应于";"会出现相应个数的空格,但是如果IFS是的话,则不会出现a前面的空格,是因为 ...
我看到这个问题的时候,也想了想,是不是可以这么解释:
shell处理空格的时候,如果IFS中不包括空格,那么每个空格都会被当成一个“词”,例如:
- @test:~> old_IFS=$IFS
- @test:~> IFS=";"
- @test:~> read A
- ;;;;; ; a b; c
- @test:~> echo $A
- a b c --> 空格保留原样,“;”被替换成空格(这是因为“;”是分隔符,把每个参数都分隔开)
复制代码
如果IFS中包含空格,那么多个连续的空格会被替换成为一个“空格”(这也是为了把参数分隔开而形成的空格),例如:
- @test:~> IFS="; " -->注意这里包含一个空格
- @test:~> read A
- ;;;;; ; a b; c
- @test:~> echo $A
- a b c --> 第一个a前面的所有前导空格被删掉,a之后连续空格被替换成为一个空格,同理“;”被替换成空格(这是因为“;”是分隔符,把每个参数都分隔开)
- @test:~> IFS=$old_IFS --> 测试完毕
复制代码
不知道这么解释是否合理?谢谢!
[ 本帖最后由 cpfly 于 2008-6-17 19:42 编辑 ] |
|