概述
用bash脚本读文件的方法有很多。请看第一部分,我使用了while循环及其后的管道命令(|)(cat $FILE | while read line; do … ),并在循环当中递增 i 的值,最后,我得到了非我所想的 i 。主要的原因是,管道命令会发起子shell来读取文件,而任何在(子shell的)while循环中的操作(例如 i ++),都会随着子shell的结束而丢失。
而第二种,也是最坏的一种,其最明显的错误就是在读文件的过程中使用了for循环(for fileline in $(cat $FILE);do ..),这样每打印一个单词就换一次行,因为for循环使用空格作为默认的IFS。
完美的方法,即第三种的while循环(while read line;do …. done < $FILE) 是最合适且最简单的一行行地读文件的方法。请看以下例子。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
Input: $
cat
sample.txt
This is sample
file
This is normal text
file
Source: $
cat
readfile.sh
#!/bin/bash
i=1;
FILE=sample.txt
# Wrong way to read the file.
# This may cause problem, check the value of 'i' at the end of the loop
echo
"###############################"
cat
$FILE |
while
read
line;
do
echo
"Line # $i: $line"
((i++))
done
echo
"Total number of lines in file: $i"
# The worst way to read file.
echo
"###############################"
for
fileline
in
$(
cat
$FILE);
do
echo
$fileline
done
# This is correct way to read file.
echo
"################################"
k=1
while
read
line;
do
echo
"Line # $k: $line"
((k++))
done
< $FILE
echo
"Total number of lines in file: $k"
Output: $ .
/readfile
.sh
###############################
Line
# 1: This is sample file
Line
# 2: This is normal text file
Total number of lines
in
file
: 1
###############################
This
is
sample
file
This
is
normal
text
file
################################
Line
# 1: This is sample file
Line
# 2: This is normal text file
Total number of lines
in
file
: 3
|
最后
以上就是敏感春天为你收集整理的Bash脚本:怎样一行行地读文件(最好和最坏的方法)的全部内容,希望文章能够帮你解决Bash脚本:怎样一行行地读文件(最好和最坏的方法)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复