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:
![](https://static.packt-cdn.com/products/9781788990554/graphics/assets/bcbd11c3-188d-4dc7-97da-4bfaf9629138.png)
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...