bash read a file line by line
Quick Answer
while IFS= read -r line; do
echo "$line"
done < input.txt
Usage
You need to process a file line by line in a bash script.
Other causes & fixes
Why IFS= and -r matter
# IFS= preserves leading/trailing whitespace on each line
# -r prevents backslash interpretation (\n stays as \n)
# Without them, lines with spaces or backslashes are mangled:
while read line; do # BAD — leading spaces stripped, \ consumed
echo "$line"
done < file.txt
Process the last line even without trailing newline
while IFS= read -r line || [ -n "$line" ]; do
echo "$line"
done < input.txt
# The || [ -n "$line" ] handles files missing a final newline
Read from a command output
while IFS= read -r line; do
echo "Processing: $line"
done < <(find . -name "*.txt")
Read two fields per line (CSV-like)
while IFS=',' read -r name value; do
echo "Name=$name Value=$value"
done < data.csv
Use mapfile to read all lines into an array
mapfile -t lines < input.txt
echo "${lines[0]}" # first line
echo "${#lines[@]}" # line count
Related