寻觅生命中的那一片浅草......

while read line的一些问题

while read line的一些问题

Q1. 曾经面试的时候被问到一个问题, 说
while read line ; do
echo $line ;
done < ./a.txt
失败, 会是什么原因, 当时觉得不太可能, 就回答了“我用的时候没有碰到过这种情况”。 前段在写一个脚本的时候, 确实遇到了所谓的while read 失败, 原因是我读入的文件是在win下用dos格式保存的文本, 所以每行结束都带有一个\r字符, 这个字符在linux/unix环境下的作用是“回到一行的开始”, 如果再对$line做相关的字符串操作的话(比如字符串连接), 得到的结果可能会让人迷惑… 所以当把win下编译的文本用在linux/unix环境时, 最好做一下格式转换

Q2. 2009-08-01更新:
# cat ur_file
1234 abcd
5678 efgh

# vi t3.sh
#!/bin/bash

while read t1 t2 ; do
echo $t1 $t2 ; awk ‘{ print $0 }’
done < ./ur_file

#./t3.sh
1234 abcd
5678 efgh

# sh -x ./t3.sh 发现只read 了一次

Q3.

# seq 10 > file
# while read line ; do
> echo $line
> dd &>/dev/null
> done < ./file
1

为什么这里只打印第一行呢?
问题的关键在于:
read从输入读取了一行内容后,
其它的程序(比如 rsh或sed)从同样的地方把其它的输入读走了,
read当然读不到其它内容了,
while也就结束了

摘自:http://bbs.chinaunix.net/viewthread.php?tid=769040&extra=&page=2

可以打开set -x, 看看, 确实只read了两次, 第一次read出第一行, 第二次read不到就退出while循环
read 和 dd都从文件描述符3中读取数据

尚无评论

发表评论

2024年四月
« 5月    
1234567
891011121314
15161718192021
22232425262728
2930