shell - IFS分隔符
- Shell中的IFS解惑: http://blog.csdn.net/whuslei/article/details/7187639
IFS是internal field separator的缩写,shell的特殊环境变量。ksh根据IFS存储的值,可以是空格、tab、换行符或者其他自定义符号,来解析输入和输出的变量值。
-
用IFS定制分隔符的方式范例
IFS='|' text='a a a a|b b b b|c c c c' for i in $text;do echo "i=$i";done
- IP地址倒序
如果有一IP地址220.112.253.111, 欲将这个IP地址颠倒顺序,你可以定义IFS为".",然后直接echo这个地址即可得到此IP的4个数值,然后重新把IFS设为空格,重新组合四个IP>地址的数值即可。
# The following code segment will only work in ksh, # and it will fail in bash IP=220.112.253.111 IFS="." TMPIP=$(echo $IP) IFS=" " # space echo $TMPIP | read ip1 ip2 ip3 ip4 INVERT_IP=$ip4.$ip3.$ip2.$ip1
- 使用换行符做分隔符
#!/bin/sh
conf="ABC
A B C
1|2|3
1 2 3"
echo "$conf"
echo --------------
echo IFS:
echo -n "$IFS"|xxd
echo --------------
for c in $conf;do
echo "line='$c'";
done
echo --------------
#IFS=$'\n' 表示用 换行符 做分隔
#IFS="\n" 与 IFS='\n' 都是用 n 字符作为分隔
IFS=$'\n'
echo IFS:
echo -n "$IFS"|xxd
echo --------------
for c in $conf;do
echo "line='$c'";
done
ABC A B C 1|2|3 1 2 3 -------------- IFS: 00000000: 2d6e 2020 090a 0a -n ... -------------- line='ABC' line='A' line='B' line='C' line='1|2|3' line='1' line='2' line='3' -------------- IFS: 00000000: 2d6e 200a 0a -n .. -------------- line='ABC' line='A B C' line='1|2|3' line='1 2 3'