By default, the IFS variable has the value of one of (space, newline, or tab).
Suppose that you have a file like the following and you want to iterate over its lines:
Hello, this is a test This is the second line And this is the last line
Let's write the for loop that will iterate over these lines:
#!/bin/bash file="file1.txt" for var in $(cat $file) do echo " $var" done
If you check the result, it's something that we don't need:
Since the first separator the shell found is the space, the shell treats every word as a field, but we need every line to be printed as a field.
Here we need to change the IFS variable to be newline instead.
Let's modify our script to iterate over lines correctly:
#!/bin/bash file="file1.txt" IFS=$'\n' #Here we change the default IFS to be a newline for var in $(cat $file...