LinuxSir.cn,穿越时空的Linuxsir!

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

for i in `cat temp` 中for 对空白符处理的问题。

[复制链接]
发表于 2007-3-21 18:10:20 | 显示全部楼层 |阅读模式
$ cat temp
hello world
google earth

$ for i in `cat temp`
> do echo $i;
> #需要对 i 做一些事
> done
hello
world
google
earth
但是我要的是这种结果
hello world
google earth

于是我修改temp的内容为
$ cat temp
“hello world”
“google earth”

再跑刚才的脚本,结果却是
“hello
world”
“google
earth”

用for循环我怎样才能得到
“hello world”
“google earth”
的结果啊?
谢谢
发表于 2007-3-21 18:32:28 | 显示全部楼层
一般我会这么做:

  1. while read line
  2. do
  3.         echo $line
  4. done < temp
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-3-22 01:14:14 | 显示全部楼层
IFS=$'\n'; for i in `cat temp`; do echo $i; done
回复 支持 反对

使用道具 举报

发表于 2007-3-22 12:32:40 | 显示全部楼层
OLDIFS="$IFS"
IFS=$'\n'; for i in `cat temp`; do echo $i; done

IFS="$OLDIFS"

但尽量不要用for i in `cat`
回复 支持 反对

使用道具 举报

发表于 2007-3-22 21:25:34 | 显示全部楼层
Post by seamonkey
OLDIFS="$IFS"
......
IFS="$OLDIFS"

谢谢老大指点。没注意到楼主是在命令行下运行的。
Post by seamonkey
但尽量不要用for i in `cat`

有啥副作用?占内存?啥方法好些?
回复 支持 反对

使用道具 举报

发表于 2007-3-23 03:17:10 | 显示全部楼层
for i in XXX 容易引起 arguments too much 问题吧。
while 也应该会节省内存的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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