免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4694 | 回复: 9
打印 上一主题 下一主题

请教shell中ifs的奇怪输出!!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-09 21:20 |只看该作者 |倒序浏览
  1. function output_args_ifs(){
  2.     echo "=$*"
  3.     echo "="$*
  4.     for m in $* ;do
  5.         echo "[$m]"
  6.     done
  7. }

  8. IFS=':'
  9. var='::a:b::c:::'
  10. output_args_ifs $var
复制代码
为什么输出的是:
  1. =::a:b::c::  # 少了最后一个冒号??why
  2. =  a b  c
  3. []
  4. []
  5. [a]
  6. [b]
  7. []
  8. [c]
  9. []
复制代码
最后遍历输出的也好奇怪呀????

有没有高手帮忙看哈。。。。新手~~~

论坛徽章:
0
2 [报告]
发表于 2012-01-09 21:20 |只看该作者
自己先顶下。。。在线等高手……

论坛徽章:
0
3 [报告]
发表于 2012-01-09 21:58 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2012-01-09 22:02 |只看该作者
那个很简单,这个你试试,我真不知道怎么会少了个冒号???如果替换的话,应该替换为空格隔开。。。可是单单就少了最后一个冒号???回复 3# yangkyo821


   

论坛徽章:
0
5 [报告]
发表于 2012-01-09 22:26 |只看该作者
看来我以前的关于IFS理解有偏差,看这个吧
http://bbs.chinaunix.net/thread-512925-1-1.html
有一段关于$*的解释,它是这样取的$1c$2c$3c...里面的c就是IFS的值,默认为white space。
你的字符串是'::a:b::c:::'对应是$1='',c=:,$2='',c=:,$3=a,c=:,$4=b....类推。。。跟最后的输出是一个意思

论坛徽章:
145
技术图书徽章
日期: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技术图书徽章
日期: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 [报告]
发表于 2012-01-10 00:52 |只看该作者
本帖最后由 jason680 于 2012-01-10 00:56 编辑

回复 1# whuslei

check this

IFS=':'
var='::B:b::c::: '   # note: there have a "white space" in end of string
output_args_ifs $var

=::a:B::c:::         <--- you will see the colon and white space
=  a B  c   
[]
[]
[a]
[B]
[]
[c]
[]
[]
[ ]   # the white space in end of string

   

论坛徽章:
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
7 [报告]
发表于 2012-01-10 15:54 |只看该作者
output_args_ifs "$var"

论坛徽章:
0
8 [报告]
发表于 2012-01-10 19:57 |只看该作者
很感谢!!!!最后那个输出结果我懂了,可是,为什么传进去的$var变为S*时最后一个冒号会消失呢???像 #6 jason680 那样加上一个空格就行了???如果不加空格呢?怎么做?
yangkyo821 发表于 2012-01-09 22:26
看来我以前的关于IFS理解有偏差,看这个吧
http://bbs.chinaunix.net/thread-512925-1-1.html
有一段关于 ...

论坛徽章:
0
9 [报告]
发表于 2012-01-12 21:45 |只看该作者
解决了,http://blog.csdn.net/whuslei/article/details/7187639,也贡献给大家,欢迎指正!回复 1# whuslei


   

论坛徽章:
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
10 [报告]
发表于 2012-01-13 11:09 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP