对于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
  3. 如何修改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
  4. 实验:$*使用$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
  5. 备份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