IFS(Internal Field Seprator),内部域分隔符
IFS是一种 set 变量,当 shell 处理"命令替换"和"参数替换"时,shell 根据 IFS 的值,默认是 space, tab, newline 来拆解读入的变量,
然后对特殊字符进行处理,最后重新组合赋值给该变量
[root@bogon sh]# echo -n "$IFS"|od -b 0000000 040 0000001 [root@bogon sh]# IFS=' :' [root@bogon sh]# echo -n "$IFS"|od -b 0000000 040 072 0000002
特殊直接输出IFS是看不到的
用八进制字节表示的字符对应的ASCII码值
"040"是空格
"011"是Tab
"012"是换行符"\n"
"072" 是冒号
$* 和 $@ 差别
[root@bogon sh]# IFS=':'; [root@bogon sh]# set x y z [root@bogon sh]# echo $* x y z [root@bogon sh]# echo "$*" x:y:z [root@bogon sh]# echo $@ x y z [root@bogon sh]# echo "$@" x y z [root@bogon sh]# cat ifs.sh #! /bin/bash IFS=':' echo $* echo "$*" echo $@ echo "$@" [root@bogon sh]# ./ifs.sh a b c d a b c d a:b:c:d a b c d a b c d [root@bogon sh]# cat ifs.sh #! /bin/bash IFS=':' a="ab::cd" echo $a echo "$a" [root@bogon sh]# ./ifs.sh ab cd ab::cd
ip反转
#!/bin/bash IP=220.112.253.111 IFS="." TMPIP=$(echo $IP) echo $TMPIP IFS=" " for x in $TMPIP ;do Xip="${x}.$Xip" done echo ${Xip%.}
[root@bogon sh]# echo -n "$IFS"|od -b 0000000 040 011 012 0000003 现在的是空格,tab,和换行 [root@bogon sh]# for i in `cat 1.txt`;do echo ${i}_;done; a_ b_ c_ [root@bogon sh]# for i in 'a b c';do echo ${i}_;done; a b c_ [root@bogon sh]# IFS=':' [root@bogon sh]# for i in `cat 1.txt`;do echo ${i}_;done; a b c_
[root@centos1 sh]# echo -n "$IFS"|od -b 0000000 040 0000001 [root@centos1 sh]# for i in 'a b c dd';do echo ${i}_;done; a b c dd_ [root@centos1 sh]# str='a b c dd';for i in $str;do echo ${i}_;done; a_ b_ c_ dd_