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.tx