IFS文档

IFS (Internal Field Separator)输入字段分隔符,Bash 会根据 IFS 中定义的字符来进行字符串拆分。默认情况下,IFS包含空格,制表符tab和回车,这也是Bash 读取数据都是在空格处拆分的原因。

IFS变量通常用于读取命令、参数扩展和命令替换。

cat -A <<< "$IFS"
 ^I$
$
#  " "是空格,^I$是Tab,下一行$是换行符

echo "$IFS" | od -b
0000000 040 011 012 012
0000004
# 查看$IFS,直接查看不会显示,转换成二进制显示
# 040是空格,011是Tab,012是换行符"\n",最后的012是echo的默认换行

示例:

建一个文件,内容包含|分割的字段,定义IFS为“|”,然后read读取看看怎么拆分的。

vim file.txt

cyberciti.biz|202.54.1.1|/home/httpd|ftpcbzuser
nixcraft.com|202.54.1.2|/home/httpd|ftpnixuser

vim ifstest.sh

#!/bin/bash
file=/home/hadoop/file.txt

IFS='|'
while read -r domain ip webroot username;
do
        printf "%s \n" $domain
        printf "%s \n" $ip
        printf "%s \n" $webroot
        printf "%s \n\n" $username
done < "$file"

执行 

chmod +x ifstest.sh
./ifstest.sh

结果

cyberciti.biz 
202.54.1.1 
/home/httpd 
ftpcbzuser 

nixcraft.com 
202.54.1.2 
/home/httpd 
ftpnixuser