The shell has one environment variable, which is called the Internal Field Separator (IFS). This variable indicates how the words are separated on the command line. The IFS variable is, normally or by default, a white space (' '). The IFS variable is used as a word separator (token) for the for command. In many documents, IFS can be any one of the white space, ':', '|', ': ' or any other desired character. This will be useful while using commands such as read, set, for, and so on. If we are going to change the default IFS, then it is a good practice to store the original IFS in a variable.
Later on, when we have done our required tasks, then we can assign the original character back to IFS.
In the following script for_16.sh, we are using ":" as the IFS character:
#/bin/bash
cities=Delhi:Chennai:Bangaluru:Kolkata
old_ifs="$IFS" # Saving original value of IFS
IFS=":"
for place in $cities
do
echo The name of city is $place
doneLet's test the program:
$ chmod +x for_16.sh $ ./for_16.sh
The following will be the output after executing the preceding commands:
The name of city is Delhi The name of city is Chennai The name of city is Bangaluru The name of city is Kolkata
By default the original inter field separator is a whitespace. We have saved the original IFS in the old_ifs variable. We assigned colon ':' and an IFS in the script. Therefore, we can use ':' as an inter field separator in our test file or text string.