Chinaunix

标题: 通过cat循环执行问题 [打印本页]

作者: weihuiwo    时间: 2014-06-29 11:28
标题: 通过cat循环执行问题
list 文件内容
123 444
111 222

脚本内容
for i in `cat list'
echo $i
done


执行结果
123
444
111
222

我理想的执行结果是
123 444
111 111


如果文本内容有空格执行就会另起一行了,有什么办解决这个问题吗?谢谢!



作者: Herowinter    时间: 2014-06-29 11:45
回复 1# weihuiwo


echo "$i" ?
作者: weihuiwo    时间: 2014-06-29 11:53
对,实际上我要去引用执行一个程序呢
./siefie.sh i$

但是文本里有空格一行就分成两个命令执行了。
作者: Kasiotao    时间: 2014-06-29 12:02
是要以每一行为参数么?那为什么不直接用
  1. awk '{print $0}' list
复制代码

作者: weihuiwo    时间: 2014-06-29 12:06
回复 4# Kasiotao
用这个执行的结果一样啊,有空格就另起一行了。还有别的办法了吗,谢谢!
作者: Herowinter    时间: 2014-06-29 12:15
回复 5# weihuiwo
你确定?
作者: Kasiotao    时间: 2014-06-29 12:22
本帖最后由 Kasiotao 于 2014-06-29 12:22 编辑

回复 5# weihuiwo
我的意思是,你不用用循环,例如我要以list中的每一行的内容为名字创建文件
直接
  1. awk '{print "touch " "\"" $1 " " $2 "\""}' list | sh
复制代码

作者: 银风冷月    时间: 2014-06-29 13:44
我不太清楚你想要干什么...,按我的理解是这样...
  1. while read line;do
  2.      echo $line
  3. done < list
复制代码

作者: kernel69    时间: 2014-06-29 16:51
在for前面加加个
  1. IFS=\n
复制代码
回复 1# weihuiwo


   
作者: 关阴月飞    时间: 2014-06-29 19:24
本帖最后由 关阴月飞 于 2014-06-29 19:26 编辑

跟IFS有关,在循环中很常见的问题:
解决方法1:
  1. for i in "`cat list`"
  2. do
  3. echo "$i"
  4. done
复制代码
解决方法2:
  1. IFS=$'\n'
  2. for i in `cat list`
  3. > do
  4. > echo "$i"
  5. > done
复制代码
解决方法3:
  1. while read i
  2. do
  3. echo "$i"
  4. done < list
复制代码

作者: weihuiwo    时间: 2014-06-29 20:53
谢谢各位解决了,加了IFS=$'\n'就行了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2