Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1485309
  • 博文数量: 263
  • 博客积分: 10851
  • 博客等级: 上将
  • 技术积分: 2627
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-26 22:40
文章分类

全部博文(263)

文章存档

2013年(4)

2012年(25)

2011年(33)

2010年(50)

2009年(138)

2008年(13)

分类: LINUX

2009-04-24 10:05:24

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

为什么这里只打印第一行呢?

问题的关键在于:
read从输入读取了一行内容后,
其它的程序(比如 rsh或sed)从同样的地方把其它的输入读走了,
read当然读不到其它内容了,
while也就结束了
 
摘自:
 
可以打开set -x, 看看, 确实只read了两次, 第一次read出第一行, 第二次read不到就退出while循环
read 和 dd都从文件描述符3中读取数据
阅读(7418) | 评论(0) | 转发(0) |
0

上一篇:SELinux

下一篇:ipv4的临时端口范围

给主人留下些什么吧!~~