shell內部域分隔符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_

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM