1、IFS的介绍
shell 脚本中有个变量叫IFS(Internal Field Seprator) ,内部域分隔符,其完整定义是:The shell uses the value stored in IFS, which is the space, tab, and newline characters by default, to delimit words for the read and set commands, when parsing output from command substitution, and when performing variable substitution.
shell 中的变量分为环境变量(全局变量)和普通变量(局部变量)。
环境变量也称为全局变量,可以在创建它们的Shell及其派生出来的任意子Shell中使用。普通变量只能在创建它们的Shell函数或Shell脚本中使用。另外,普通变量可以导出成为环境变量,此内容已有相关详细介绍,再此处就不再赘述了。
关于环境变量再多说一点:环境变量又可以分为自定义环境变量和shell内置的环境变量,环境变量可以在命令行中设置和创建,用户退出命令行时这些变量值就会丢失,想要永久保存环境变量,可在用户home目录下的. bash_profile或. bashrc文件中进行设置,或在/etc/profile文件中定义,这样每次用户登录时这些变量都将被初始化。
IFS 是一种环境变量,当 shell 处理"命令替换"和"参数替换"时,shell 根据 IFS 的值,默认是 space、tab、newline 来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量。
2、 IFS的简单实例
2.1、查看IFS的值
echo "$IFS"
echo "$IFS"|od -b
0000000 040 011 012 012
0000004
直接输出IFS是看不到值的,转化为二进制就可以看到了,"040"是空格,"011"是Tab,"012"是换行符"n" 。最后一个 012 是因为 echo 默认是会换行的。
备注:0000000和0000004,表示二进制的索引。
2.2、实际中的应用
#!/bin/bash
OLD_IFS=$IFS #保存原始值
IFS="" #改变IFS的值
...
...
IFS=$OLD_IFS #还原IFS的原始值