0%

对于IFS的一点总结

  1. 什么是IFS ?
    IFS是bash的内部变量,称为内部域分隔符.这个变量用来决定Bash在解释字符串时如何识别域,或者单词边界.

  2. 如何查看当前的IFS值?
    [root@Dong tmp]# echo "$IFS"

由于IFS默认为空白(空格,tab和新行),所以使用以上的命令似乎看不到字符。没关系,你可以用od命令看16进制,或是2进制值:

1
2
3
[root@Dong tmp]# echo "$IFS" | od -t x1
0000000 20 09 0a 0a
0000004

注意:$*使用$IFS 中的第一个字符,比如:

1
2
[root@Dong tmp]# set w x y z;echo "$*"
w x y z

  1. 如何修改IFS值?

普通的赋值命令即可:

1
2
3
4
5
6
7
8
[root@Dong tmp]# IFS=":"
[root@Dong tmp]# echo "$IFS"
:
[root@Dong tmp]# echo "$IFS" | od -t x1
0000000 3a 0a
0000002
[root@Dong tmp]# set w x y z;echo "$*"
w:x:y:z

  1. 实验:$*使用$IFS 中的第一个字符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@Dong tmp]# IFS="\\:;"
[root@Dong tmp]# echo "$IFS"
\:;
[root@Dong tmp]# echo "$IFS" | od -t x1
0000000 5c 3a 3b 0a
0000004
[root@Dong tmp]# set w x y z;echo "$*"
w\x\y\z
[root@Dong tmp]# IFS=":;\\"
[root@Dong tmp]# echo "$IFS"
:;\
[root@Dong tmp]# echo "$IFS" | od -t x1
0000000 3a 3b 5c 0a
0000004
[root@Dong tmp]# set w x y z;echo "$*"
w:x:y:z
  1. 备份IFS
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [root@Dong tmp]# echo "$IFS" | od -t x1
    0000000 20 09 0a 0a
    0000004
    [root@Dong tmp]# OLDIFS="$IFS"
    [root@Dong tmp]# echo "$OLDIFS" | od -t x1
    0000000 20 09 0a 0a
    0000004
    [root@Dong tmp]# IFS=":"
    [root@Dong tmp]# echo "$IFS" | od -t x1
    0000000 3a 0a
    0000002
    [root@Dong tmp]# IFS="$OLDIFS"
    [root@Dong tmp]# echo "$IFS" | od -t x1
    0000000 20 09 0a 0a
    0000004