• shell中的特殊变量IFS


    shell中特殊变量IFS的使用

    IFS是内部字段分隔符(internal field separator)。默认情况下,bash shell会将空格、制表符、换行符 当做字段分隔符。
    IFS=$' ':;" 就是将换行符、冒号、分号、双引号作为字段分隔符
    IFS=' ' //将字符和字符n作为IFS的换行符。
    IFS=$' ' //真正的使用换行符做为字段分隔符。
    IFS=' ':;" //将反斜杠、n、冒号、分号和双引号作为字段分隔符。

    shell 将字符串分割为数组

    1.使用内置的分割符IFS
    str="192.168.31.65"
    OLD_IFS="$IFS" #保存旧的分隔符
    IFS="."
    array=($str)
    IFS="$OLD_IFS" # 将IFS恢复成原来的
    for i in "${!array[@]}"; do
      echo "$i=>${array[i]}"
    done
    2.使用字符串替换然后构造数组
    str="192.168.31.65"
    array=(${str//./ })
    for i in "${!array[@]}"; do
        echo "$i=>${array[i]}"
    done

    shell 遍历行的输出结果

    对于命令行输出的结果,如果要遍历,一般都是用for循环遍历,具体语法为:
    for line in `ls`;do
        #do something
    done

    对于ls这类语句的输出结果,在遍历时会调用系统默认的分隔符(IFS=" ")。ls这类命令的结果实际是在一行,按照空格进行分割的话,如上语法就OK了。

    往往有时候是需要对命令行输出结果按行遍历的,如:
    for line in `ls -lrt`;do
        #dosomething
    done

     按照ls -lrt遍历文件的属性,此时直接这样就会发现分隔符还是用空格就不行了,这个时候,应该用如下方式:

    oldifs="$IFS"
    IFS=$'
    '
    for line in `ls -lrt`;do
        #dosomething
    done
    IFS="$oldifs"

     如上所示是先把老的分隔符给保留到中间变量中,然后替换默认分隔符为换行符,再执行遍历,此时for遍历的时候就会按行遍历,最后执行完毕后再把系统分隔符给还原。

     
  • 相关阅读:
    近期前端中的 一些常见的面试题
    一道前端学习题
    前端程序员容易忽视的一些基础知识
    web前端工程师入门须知
    Web前端知识体系精简
    面试分享:一年经验初探阿里巴巴前端社招
    抽象类、抽象函数/抽象方法详解
    C#语法-虚方法详解 Virtual 虚函数
    面向对象语言:继承关系教程
    C#动态创建Xml-LinQ方式
  • 原文地址:https://www.cnblogs.com/mianbaoshu/p/14010941.html
Copyright © 2020-2023  润新知