====== BASH - Files - Read a file - Basic read ====== while read -r line; do printf '%s\n' "$line" done < "$file" **NOTE:** This reads each line of the file into the **line** variable. * **line**: is a variable name, chosen by you. * **-r**: Prevents backslash interpretation (usually used as a backslash newline pair, to continue over multiple lines or to escape the delimiters). * Without this option, any unescaped backslashes in the input will be discarded. * You should almost always use the **-r** option with read. * **< "$file"**: The file to read. ---- ===== Prevent removal of leading and trailing white-space characters ===== while IFS= read -r line; do printf '%s\n' "$line" done < "$file" **NOTE:** Very similar to the basic read, but adding usage of **IFS**. The **IFS** (internal field separator) is often set to support reads. * **IFS= **: By default, read modifies each line read, by removing all leading and trailing white-space characters (spaces and tabs, if present in IFS, which is the default). * To prevent this, the IFS variable is cleared. * **line**: is a variable name, chosen by you. * **-r**: Prevents backslash interpretation (usually used as a backslash newline pair, to continue over multiple lines or to escape the delimiters). * Without this option, any unescaped backslashes in the input will be discarded. * You should almost always use the **-r** option with read. * **< "$file"**: The file to read. ---- ===== Checking that returned line is not empty ===== #!/bin/bash while IFS='' read -r line || [[ -n "$line" ]]; do echo "Text read from file: $line" done < "$1" **NOTE:** The **-n** checks if the string is not null. This is the opposite of **-z**, which checks if a string is null, i.e. it has zero length.