IFS

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_