免费注册 查看新帖 |

Chinaunix

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

请教一个关于IFS的问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-16 13:18 |只看该作者 |倒序浏览
#表示shell提示符!

#string="a+b+c"
#echo ${IFS}
得到的结果是一个空行,这个我可以理解,因为默认的IFS是<空格><制表><换行>
#IFS=+
#echo ${IFS}
得到的结果还是一个空行,我了个去~~~~IFS=+没有作用吗?
但是继续
#echo ${string}
得到的结果是a b c,可见IFS已经被修改了,但是为什么echo ${IFS}却看不到我想象的+呢?

论坛徽章:
0
2 [报告]
发表于 2011-05-16 13:33 |只看该作者
echo -e "$IFS"

论坛徽章:
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
3 [报告]
发表于 2011-05-16 13:35 |只看该作者
#表示shell提示符!

#string="a+b+c"
#echo ${IFS}
得到的结果是一个空行,这个我可以理解,因为默认的 ...
聪聪知不道 发表于 2011-05-16 13:18



echo "${IFS}"

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
4 [报告]
发表于 2011-05-16 14:09 |只看该作者
回复 1# 聪聪知不道


    echo $IFS
    shell 先做变量替换,由于所有的连续的IFS被替换成一个空格,所以打印为空

   echo "$IFS"
   引号阻止了IFS被替换,所以可以打印出+

   例如:
  1. str="a                            b"
  2.     echo $str #a b
  3.     echo "$str" # a                            b
复制代码

论坛徽章:
0
5 [报告]
发表于 2011-05-16 14:11 |只看该作者
这个明白了,谢谢,还有一个问题:wink:

写一个shell脚本ifs.sh:
#! /bin/bash --
echo "${IFS}"

在shell进行如下的调用
#IFS=+ ./ifs.sh
我认为会输出一个+, 但是看到的是空行……



反过来,如果用其他的变量重新写一个脚本 var.sh:
#! /bin/bash --
echo "${mystr}"

在shell进行如下调用
#mystr=hello ./var.sh
则看到了想要的hello

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
6 [报告]
发表于 2011-05-16 14:25 |只看该作者
回复 5# 聪聪知不道

这个是因为 ./script 的调用方式是新启动一个shell进程,在这个过程中,会重新读取配置文件,例如bash的/etc/.bashrc, 在这个文件中
会重新设置IFS【不是很确定,参考】,其他自定义变量当然就不会被重新设置了
  1. source scriptname
复制代码
上述调用方式就能得到你要的结果了,至于为什么,看下soure, fork, exec的区别的。

论坛徽章:
0
7 [报告]
发表于 2011-05-16 14:42 |只看该作者
非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP