#!/bin/bash
input="/path/to/txt/file"
while IFS= read -r var
do
echo "$var"
done < "$input"
案例
#!/bin/bash
file="/home/vivek/data.txt"
while IFS= read -r line
do
# display $line or do somthing with $line
printf '%s\n' "$line"
done <"$file"
如果要按照列来读取
#!/bin/bash
file="/etc/passwd"
while IFS=: read -r f1 f2 f3 f4 f5 f6 f7
do
# display fields using f1, f2,..,f7
printf 'Username: %s, Shell: %s, Home Dir: %s\n' "$f1" "$f7" "$f6"
done <"$file"
读取文件行到数组
declare -a myarray
let i=0
while IFS=$'\n' read -r line_data; do
# Parse “${line_data}” to produce content
# that will be stored in the array.
# (Assume content is stored in a variable
# named 'array_element'.)
# ...
myarray[i]="${array_element}" # Populate array.
((++i))
done < pathname_of_file_to_read
最高效的(也是最简单的)方法是将文件的所以行使用bash内建命令readarray读入到一个数组:
declare -a myarray
readarray myarray < file_pathname # Include newline.
readarray -t myarray < file_pathname # Exclude newline.
举例:
#!/bin/bash
declare -a myarray
# Load file into array.
readarray myarray < ~/.bashrc
# Explicitly report array content.
let i=0
while (( ${#myarray[@]} > i )); do
printf "${myarray[i++]}\n"
done