bash下的很多命令都会分割单词,绝大多数时候默认是采用空格作为分隔符,有些时候遇到制表符、换行符也会进行分隔。最典型的是"for i in a b c",它会分割变量列表"a b c"使其成为三个变量。这种分隔符是由IFS变量指定的。
IFS是bash内部字段分隔符的环境变量。
[root@localhost ~]# set | grep IFS IFS=$' '
默认的IFS在碰到空格、制表符 和分行符 就会自动分隔进入下一步。但是对空格处理有点不一样,对行首和行尾两边的空格不处理,并且多个连续的空格默认当作一个空格。
有些时候在编写脚本或执行循环的时候,修改IFS可以起很大作用。如果要修改IFS,最好记得先备份系统IFS,再需要的地方再还原IFS。
例如:
[root@localhost ~]# data="name,sex,rollno,location" [root@localhost ~]# oldIFS=$IFS [root@localhost ~]# IFS=$',' [root@localhost ~]# for item in $data;do echo Item:$item;done Item:name Item:sex Item:rollno Item:location
[root@localhost ~]# IFS=$oldIFS
可以看到,上面的示例将默认分隔符设置为了逗号后,不用处理data变量就可以轻松划分字段了。
再来一个有趣的示例:逐字符打印各个字符。
[root@localhost ~]# cat /etc/resolv.conf | (IFS=$'