Linux中有个特殊的环境变量IFS,叫作内部字段分隔符(internal field separator)。IFS环境变量定义了bash shell中用于字段分隔符的一些列字符。默认情况下,bash shell会将空格、制表符、换行符作为字段分隔符。
如果bash shell在数据中看到了这些字符中的任何一个,它就会假定这表明了列表中一个新数据字段的开始。在处理可能含有空格数据(比如文件名)时,会带来麻烦。为了解决这个问题,可以在bash shell中临时修改IFS的值,来限制bash shell当作字段分隔符的字符。
警告:
在处理代码量较大的脚本时,可能在一个地方需要修改IFS的值,然后忽略这次修改,在脚本的其他地方继续沿用IFS的默认值。一个可参考的安全实践是在改变IFS之前保存原来的IFS值,之后再恢复它。
这种技术可以这样实现:
IFS.OLD=$IFS
IFS=$'\n'
<在代码中使用新的IFS值>
IFS=$IFS.OLD
这就保证了在脚本的后续操作中使用的是IFS的默认值。
还有其他一些IFS环境变量的绝妙用法。假定你要遍历一个文件中用冒号分隔的值(比如在/etc/passwd文件中)。你要做的就是将IFS的值设为冒号。
IFS=:
如果要指定多个IFS字符,只要将它们在赋值行串起来就行。
IFS=$'\n':;"
这个赋值会将换行符、冒号、分号和双引号作为字段分隔符。如何使用IFS字符解析数据没有任何限制。

553

被折叠的 条评论
为什么被折叠?



