• Shell:IFS


    IFS

    在shell中使用内部变量IFS来决定项目列表或值列表的分隔符,IFS的默认值是空格、Tab制表或换行符。

    使用for循环读取项目列表或值列表时,就会根据IFS的值判断列表中值的个数,最终决定循环的次数。

    例如:A="hello word linux",使用空格作为分隔符时,变量A有三列,使用w作为分隔符,变量A有两列。

    IFS的多个值之间是“或”关系。

    正常使用echo输出IFS变量的值时,是看不到内容的,但是可以通过od命令将数据转换为八进制数据后再查看。

    image-20210715214523135

    040是空格键,011是Tab制表符,012是换行符。

    案例:

    下面因为修改了默认的IFS为冒号,所以变量只有冒号分割时,才能让x,y,z都能够按照我们想要的去赋值。

    [root@localhost ~]# OLD_IFS="$IFS"
    [root@localhost ~]# IFS=":"
    [root@localhost ~]# read -p "输入三个数据:" x y z
    输入三个数据:1 2 3
    #因为冒号作为分隔符,而1 2 3之间没有冒号,所以1 2 3直接赋值给x,y和z都为空
    [root@localhost ~]# echo $x
    1 2 3
    [root@localhost ~]# echo $y
    
    [root@localhost ~]# echo $z
    
    [root@localhost ~]# read -p "输入三个数据:" x y z
    输入三个数据:1:2:3
    [root@localhost ~]# echo $x
    1
    [root@localhost ~]# echo $y
    2
    [root@localhost ~]# echo $z
    3
    [root@localhost ~]# IFS=$OLD_IFS
    [root@localhost ~]# read -p "输入三个数据:" x y z
    输入三个数据:1 2 3
    [root@localhost ~]# echo $x
    1
    [root@localhost ~]# echo $y
    2
    [root@localhost ~]# echo $z
    3
    

    此外也可以定义多个分隔符:

    [root@localhost ~]# OLD_IFS="$IFS"
    [root@localhost ~]# IFS=":;."
    [root@localhost ~]# read -p "输入三个数据:" x y z
    输入三个数据:1.2:3
    [root@localhost ~]# echo $x
    1
    [root@localhost ~]# echo $y
    2
    [root@localhost ~]# echo $z
    3
    [root@localhost ~]# IFS=$OLD_IFS
    

    我们可以设置特殊的控制字符吗,例如IFS=" "

    [root@localhost ~]# OLD_IFS="$IFS"
    [root@localhost ~]# IFS="	"
    [root@localhost ~]# read -p "输入三个数据:" x y z
    输入三个数据:1  2       3
    [root@localhost ~]# echo $x
    1       2       3
    [root@localhost ~]# echo $y
    
    [root@localhost ~]# echo $z
    
    [root@localhost ~]# read -p "输入三个数据:" x y z
    输入三个数据:1t2t3
    [root@localhost ~]# echo $x
    1
    [root@localhost ~]# echo $y
    2
    [root@localhost ~]# echo $z
    3
    

    很显然,这里会使用字母t作为默认分隔符,因为这里是转义、屏蔽的意思,对后面的t进行屏蔽,意思就是一个普通的字母t。

    那么如何设置特殊的控制字符作为分隔符呢?必须使用$'string'的方式,否则系统无法正确的理解特殊字符的含义。

    特殊的控制字符如下:

    控制字符 描述
    a Bell响铃符
     Backspace退格符
    f Form Feed换行符,光标仍旧停留在原来的位置
    New Line换行符,光标停留在行首
    Return光标移至行首,但不换行
    Horizontal Tab水平制表符
    v Vertical Tab垂直制表符
    nn 任意八进制字符

    测试:

    [root@localhost ~]# IFS=$'	'
    [root@localhost ~]# read -p "输入三个数据:" x y z
    输入三个数据:1  2       3
    [root@localhost ~]# echo $x
    1
    [root@localhost ~]# echo $y
    2
    [root@localhost ~]# echo $z
    3
    

    如何通过命令将IFS变量的值还原为默认值?命令如下:

    IFS=$' 	
    '
    
  • 相关阅读:
    VMWare中Red Hat Enterprise Linux 6与Windows XP共享文件夹/共享目录
    PetShop 4.0的数据库
    Eclipse安装Perl插件
    安装GCC for Red Hat Enterprise Linux Server release 6(64位)
    下载 Microsoft .NET Pet Shop 4.0
    一步一步安装 Microsoft .NET Pet Shop 4.0
    Visual Studio 2008安装ASP.NET MVC 2 RTM
    HTML标签大全(常用)
    换了个公司
    Counterfeit Dollar(poj1013暴力枚举)
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/15017784.html
Copyright © 2020-2023  润新知