如何让 read 不自动去掉开头的空格?

如何让 read 不自动去掉开头的空格?

用 read 实现了一个简单的 nl, 结果不 work
引用:
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[26096 0] ; cat cat.sh
#!/bin/bash

file=$1
if [ ! -f "$file" ]; then
    exit 1
fi

lineno=0
while read -r line; do
    printf "%6u  %s\n" $((++lineno)) "$line"
done < "$file"
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[26096 0] ; ./cat.sh cat.sh
     1  #!/bin/bash
     2
     3  file=$1
     4  if [ ! -f "$file" ]; then
     5  exit 1
     6  fi
     7
     8  lineno=0
     9  while read -r line; do
    10  printf "%6u  %s\n" $((++lineno)) "$line"
    11  done < "$file"
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[26096 0] ; o
      
关注一下

要不用别的办法。。。      
还有什么好的方法能一行一行的遍历一个文件呢? 最好不要 perl       
awk一向是你擅长的呀
awk '{print NR,$0}' xxx

以前曾有同事使用awk强行编编辑xorg.conf。。。      
俺是想找一个比较 common 的方法, 可以依次将文件的各行赋值到一个 var 中, 然后再做其它处理      
done < "$file" 是什么意思?      
引用:
原帖由 TUDOU01 于 2007-8-18 19:35 发表
done < "$file" 是什么意思?

< "$file" 是基本的输入重定向,为整个 while ... do 循环提供输入      
sed -n "$line p"  file 这种恶心方法...      
引用:
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[21645 0] ; cat cat.sh
#!/bin/bash

file=$1
if [ ! -f "$file" ]; then
    exit 1
fi

saveIFS="$IFS"
IFS=$'\n'
lineno=0
while read -r line; do
    printf "%6u  %s\n" $((++lineno)) "$line"
done < "$file"
IFS="$saveIFS"
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[21645 0] ; ./cat.sh cat.sh
     1  #!/bin/bash
     2
     3  file=$1
     4  if [ ! -f "$file" ]; then
     5      exit 1
     6  fi
     7
     8  saveIFS="$IFS"
     9  IFS=$'\n'
    10  lineno=0
    11  while read -r line; do
    12      printf "%6u  %s\n" $((++lineno)) "$line"
    13  done < "$file"
    14  IFS="$saveIFS"
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[21645 0] ; bye
      
IFS=$'\n'
不明白这个值是什么