zoukankan      html  css  js  c++  java
  • IFS(Internal Field Seprator)

    IFS(Internal Field Seprator)

    先设置个变量,然后打印出来,abcd中间为一个空格

    [root@dou ~]# str1="aaa bbb ccc ddd"
    [root@dou ~]# echo $str1
    aaa bbb ccc ddd
    [root@dou ~]# echo "$str1"
    aaa bbb ccc ddd
    [root@dou ~]#

    然后修改变量,abcd中间空格递增,如  aaa<space>bbb<space><space>ccc<space><space><space>ddd   

    [root@dou ~]# str1="aaa bbb  ccc   ddd"
    [root@dou ~]# echo $str1
    aaa bbb ccc ddd
    [root@dou ~]# echo "$str1"
    aaa bbb  ccc   ddd
    [root@dou ~]#

    发现问题,第一个输出不对,少了几个空格。

    原因就是IFS(内部域分隔符)从中作梗,导致空格合并。

    以二进制打印IFS的值看一下

    [root@dou ~]# echo "$IFS" |od -b
    0000000 040 011 012 012
    0000004
    [root@dou ~]#
    "040"是空格,"011"是Tab,"012"是换行符"
    "
    最后一个 012  echo 默认的换行

            IFS 是一种 set 变量,当 shell 处理"命令替换"和"参数替换"时,shell 根据 IFS 的值,默认是 space, tab, newline 来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量

            分隔符(不是所有的分隔符都会合并,空格是个例外)进行合并,所以就成了aaa<分隔符>bbb<分隔符>ccc<分隔符>ddd,.

            "" 的作用使得<space>没有进行合并转换,所以第二次输出正确。

    使用IFS时建议先设置一个临时变量来保存当前值,然后自定义IFS值,使用完毕后恢复IFS初始值。不然的话后面shell脚本会出现奇奇怪怪的错误

    OLD_IFS="$IFS"
    IFS=","
    #your script
    IFS="$OLD_IFS"

    IFS在shell脚本中用来分割某些变量还是很好用的。

  • 相关阅读:
    查找算法——找到序列中第二大的数(修正版)
    排序算法——堆排序
    排序算法——选择排序
    排序算法——冒泡排序
    排序算法——快速排序
    2013年全国各大著名的IT公司薪资待遇大揭密 给出入职场的民工一点建议
    各大IT公司2012校园招聘笔试面试整理
    九大排序算法总结
    mysql之创建数据库,创建数据表
    各种排序算法汇总
  • 原文地址:https://www.cnblogs.com/doufy/p/12195388.html
Copyright © 2011-2022 走看看