免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: Minsic
打印 上一主题 下一主题

关于read命令的一个小问题  关闭 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2006-07-26 20:16 |只看该作者
算是彻底明白了IFS

论坛徽章:
0
22 [报告]
发表于 2006-07-27 11:01 |只看该作者
不知道,大家注意到了没有?
网中人大哥,他写的东西啊,特别的注意细节,例如,总是 olde_IFS=IFS ,然后再改变IFS 数值。最后,可以很方便的改回 IFS 。
但是其他的网友,写的东西就是很直接的,1)IFS=";" 2) IFS=; 3) IFS=" " 4) IFS=
我觉得这样其实对于系统来说是一个不好的习惯,容易给自己的系统带来潜在的........
看来我们这些新手需要学习的东西不是一点点阿,难怪小的时候听别人说,行家一出手便知有没有。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
23 [报告]
发表于 2006-07-27 11:06 |只看该作者
比较一下
olde_IFS=IFS
olde_IFS=$IFS
习惯是很难改变的

论坛徽章:
0
24 [报告]
发表于 2007-04-04 17:31 |只看该作者
但是16楼出现空格的问题还没有解决,我也遇到了类似的问题,
$IFS=";"
$read A
;;;;a;b;c
$echo $A
结果是:
    a b c

对应于";"会出现相应个数的空格,但是如果IFS是<space>的话,则不会出现a前面的空格,是因为shell对默认的IFS和设定的IFS处理方式不同吗?

论坛徽章:
0
25 [报告]
发表于 2008-04-15 15:25 |只看该作者
关于read命令的一个小问题


精彩!
顶……

论坛徽章:
0
26 [报告]
发表于 2008-05-27 14:01 |只看该作者
虽然是老帖子,讨论真精彩...受教

论坛徽章:
0
27 [报告]
发表于 2008-06-17 19:37 |只看该作者
原帖由 yourminmin 于 2007-4-4 17:31 发表
但是16楼出现空格的问题还没有解决,我也遇到了类似的问题,
$IFS=";"
$read A
;;;;a;b;c
$echo $A
结果是:
    a b c

对应于";"会出现相应个数的空格,但是如果IFS是的话,则不会出现a前面的空格,是因为 ...


我看到这个问题的时候,也想了想,是不是可以这么解释:
shell处理空格的时候,如果IFS中不包括空格,那么每个空格都会被当成一个“词”,例如:


  1. @test:~> old_IFS=$IFS
  2. @test:~> IFS=";"
  3. @test:~> read A
  4.     ;;;;; ; a    b;    c
  5. @test:~> echo $A
  6.              a    b     c            --> 空格保留原样,“;”被替换成空格(这是因为“;”是分隔符,把每个参数都分隔开)
复制代码


如果IFS中包含空格,那么多个连续的空格会被替换成为一个“空格”(这也是为了把参数分隔开而形成的空格),例如:

  1. @test:~> IFS="; "     -->注意这里包含一个空格
  2. @test:~> read A
  3.     ;;;;; ; a    b;    c
  4. @test:~> echo $A
  5.       a b c     --> 第一个a前面的所有前导空格被删掉,a之后连续空格被替换成为一个空格,同理“;”被替换成空格(这是因为“;”是分隔符,把每个参数都分隔开)
  6. @test:~> IFS=$old_IFS  --> 测试完毕
复制代码



不知道这么解释是否合理?谢谢!

[ 本帖最后由 cpfly 于 2008-6-17 19:42 编辑 ]

论坛徽章:
0
28 [报告]
发表于 2008-07-26 17:27 |只看该作者
小小一个细节居然被讨论得如此精彩,不错!

论坛徽章:
0
29 [报告]
发表于 2008-07-27 00:36 |只看该作者
你想要Shell如何处理空格? 应该很不好处理吧,所以它就把它trim掉了

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
30 [报告]
发表于 2008-07-28 09:15 |只看该作者
我的理解:
如果IFS包含whitespace,那么shell忽略word开头和结尾的whitespace。
如是IFS=“;",那么每一个;都是word分隔符。

输出时每个word之间用space分隔。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP