I'm learning bash and trying to understand the difference between these two methods of reading lines from a file.
1.
while IFS= read -r line
do
echo $line
done < "$file"
2.
cat $file |
while read data
do
echo $i
done
So basically what I'm wondering is: Is either of them more common practice than the other? Are there performance differences? etc.
Also, are there other ways of reading from a file that are even better, especially when it comes to reading from large files?
The second one is a Useless Use of Cat: http://porkmail.org/era/unix/award.html
I use the done < "$file"
form.
No, there is not a better way in Bash. But eliminating one process (cat
) is nice.
There are a few advantages in the first method:
cat
and pipeEven if the while loop were to consume the output of another command (through process substitution as shown below), the first method is better as it eliminates the subshell:
while read -r line; do
# loop steps
done < <(_command_)
See also:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With