shell IFS 配合 read 读文件
参考《linux shell核心编程指南》3.5 ,无需仔细阅读,可以当做工具书使用。
在Shell中使用内部变量IFS(Internal Field Seprator)来决定项目列表或值列表的分隔符,IFS的默认值为空格、Tab制表符或换行符。使用for循环读取项目列表或值列表时,就会根据IFS的值判断列表中值的个数,最终决定循环的次数。例如,A="hello the world",当使用空格作分隔符时,变量A的值有三列。但是,当使用字母t作为分隔符时,变量A的值就有两列。所以当使用不同的分隔符时读取数据的结果也会有很大差别,这点在编写脚本时一定要注意!IFS的多个值之间是“或”关系,所以for循环在读取列表时,数据可以使用空格分隔,或使用Tab制表符分隔,或使用换行符对数据进行分隔。因为空格、Tab制表符和换行符都属于ASCII码表中的控制字符,是不可显示的内容,所以正常使用echo命令显示该变量的值时,是看不到内容的,但是可以通过od命令将数据转换为八进制数据后再查看。
#!/bin/bash while IFS=":" READ user pass uid gid info home shell do echo "heihei" done < /etc/passwd
上面的可以联想到cat, 使用<<符号可以将数据内容重定向传递给前面的一个命令,作为命令的输入。
cat > 1.txt << EOF echo "hello" EOF