LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1264|回复: 5

echo自带了将换行符变成空白符的功能吗?

[复制链接]
发表于 2006-2-21 10:39:29 | 显示全部楼层 |阅读模式
如下例:

  1. #cat aaa
  2. aaa
  3. ccc
  4. eee
  5. fff
  6. ggg
  7. # echo $( cat aaa )
  8. aaa ccc eee fff ggg
复制代码

请问这是为什么?谢谢!
发表于 2006-2-21 12:48:01 | 显示全部楼层
Post by jiazhengw
如下例:

  1. #cat aaa
  2. aaa
  3. ccc
  4. eee
  5. fff
  6. ggg
  7. # echo $( cat aaa )
  8. aaa ccc eee fff ggg
复制代码

请问这是为什么?谢谢!

default IFS settings. try this:
  1. ifs=$IFS; IFS="\n"; echo $(cat aaa)
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-21 14:24:40 | 显示全部楼层
咦,这样一试,果然是的,改成IFS为空格,也是原aaa文件的原样。那这是为什么呢?其中有什么样的一个过程呢?
回复 支持 反对

使用道具 举报

发表于 2006-2-21 20:20:49 | 显示全部楼层
Post by jiazhengw
咦,这样一试,果然是的,改成IFS为空格,也是原aaa文件的原样。那这是为什么呢?其中有什么样的一个过程呢?


因为在命令替换后,bash将其中的换行符\n看做了IFS,所以就变成了这样
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-21 21:34:03 | 显示全部楼层
Post by johnny_jiang
因为在命令替换后,bash将其中的换行符\n看做了IFS,所以就变成了这样


也就是说,在命令替换时,bash会将变量之间的\n看成IFS,从而替换成空格(其实也是IFS),可以这样理解吧。有待试验证实。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-21 22:20:18 | 显示全部楼层
已经证实了,我将IFS 改成 :% ,再用 echo $(cat aaa) 命令输出带有 :%分隔的文本文件,果然将:和%都换成了空格。且用printf也验证了一下,虽然printf只打印出了第一个字符串,但:已经去掉了。所以可以这样说:bash在单词分离时,用IFS分离后,都以空格作为分隔符,以符合我们平时的习惯!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表