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_