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
是要以每一行为参数么?那为什么不直接用
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中的每一行的内容为名字创建文件
直接
awk '{print "touch " "\"" $1 " " $2 "\""}' list | sh
复制代码
作者:
银风冷月
时间:
2014-06-29 13:44
我不太清楚你想要干什么...,按我的理解是这样...
while read line;do
echo $line
done < list
复制代码
作者:
kernel69
时间:
2014-06-29 16:51
在for前面加加个
IFS=\n
复制代码
回复
1#
weihuiwo
作者:
关阴月飞
时间:
2014-06-29 19:24
本帖最后由 关阴月飞 于 2014-06-29 19:26 编辑
跟IFS有关,在循环中很常见的问题:
解决方法1:
for i in "`cat list`"
do
echo "$i"
done
复制代码
解决方法2:
IFS=$'\n'
for i in `cat list`
> do
> echo "$i"
> done
复制代码
解决方法3:
while read i
do
echo "$i"
done < list
复制代码
作者:
weihuiwo
时间:
2014-06-29 20:53
谢谢各位解决了,加了IFS=$'\n'就行了
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2