美文网首页
IFS使用之道

IFS使用之道

作者: kezihehe | 来源:发表于2017-02-28 14:05 被阅读0次

    IFS是什么鬼

    IFS(Internal Field Seprator),即内部域分隔符

    IFS(Internal Field Seprator),即内部域分隔符,完整定义是“The shell uses the value stored in IFS, which is the space, tab, and newline characters by default, to delimit words for the read and set commands, when parsing output from command substitution, and when performing variable substituioin.”

    IFS查看

    IFS存在于登录shell的局部环境变量中

    [root@localhost ~]# set|grep IFS
    IFS=$' \t\n'
    [root@localhost ~]#
    

    shell脚本中应用

    通常在shell脚本中,我们会使用for遍历使用特定字符分隔的字符串,而for循环的默认分隔符是空格,这是我们就需要修改当前脚本的默认分隔符。例如,遍历如下用分号分隔的字符串

    #!/bin/sh
    file_name='hello.txt:world.txt:test.txt'  #被遍历的字符串
    OLD_IFS=$IFS  #将默认的IFS保存到临时变量中,以便后续恢复默认值
    IFS=':'  #定义新的分隔符
    for i in $file_name;do
      echo $i
    done
    IFS=$OLD_IFS  #恢复默认的分隔符
    

    指定的分隔符中含有转义字符

    在有些情况下,我们的分隔符可能用到转义字符,录入换行符(\n)、制表符(\t)等,如果直接使用IFS='\n'或者IFS='\t'就会发生错误,这时,就需要使用$符号+单引号+转义字符的形式了,例如使用换行符作为分隔符就需要这样设置

    IFS=$'\n'
    

    例如解析某文件(slaves)中各行的值,文件内容如下

    nginx
    tomcat
    hodoop
    s100
    kafka
    

    shell脚本代码如下

    #!/bin/sh
    host_list=`cat slaves`
    OLD_IFS=$IFS
    IFS=$'\n'  #注意是单引号
    for i in $host_list;do
      echo $i
    done
    IFS=$OLD_IFS
    

    相关文章

      网友评论

          本文标题:IFS使用之道

          本文链接:https://www.haomeiwen.com/subject/deexgttx.html