美文网首页
1.16 字段分隔符和迭代器

1.16 字段分隔符和迭代器

作者: 拙言_Coder | 来源:发表于2019-03-05 13:57 被阅读0次

    《Linux Shell 脚本攻略(第 2 版)》读书笔记

    字段分隔符

    内部字段分隔符(Internal Field Seprator,IFS),是当前shell环境使用的默认定界字符串。对于 IFS 的定义如下:

    The Internal Field Separator that is used for word splitting after expansion and to split lines into words with the read builtin command. The default value is <space><tab><new-line>.

    IFS 的作用如下:

    • IFS作为Shell的内置变量,是一个用于分割字段的字符列表。
    • Shell把变量IFS内的每一个字符都当做是一个分割符(delimeter),用这些字符作为每一个字段的结束符来进行分割。
    • 如果IFS没有设置,或者IFS的值被设置为“ \t\n”(space, tab和 newline),那么操作对象的开始和结束处的所有space, tab和newline序列都将被忽略,但是操作对象中间的space, tab和newline序列会作为界定符工作。
    • 如果IFS值不是默认值(例如程序中对IFS进行设置过),只有出现在IFS内的空白字符(可能是space, tab或newline中的一个或几个)才会在单词开始和结束处被忽略,这里说的是单词,而不是整个操作对象。
    • IFS内的非空白字符多个连续出现时,每个非空白字符会被当做单独的分隔符看待,但是多个连续的空白字符会被当做一个分隔符看待。
    • 如果IFS为空(“null”),则不会进行单词分割。

    以上几点参考了网上的这篇文章《详细解析Shell中的IFS变量》

    查看 IFS 的默认值

    $ echo -n "$IFS" | hexdump
    0000000 20 09 0a    #0x20, 0x09和0x0a分别对应于空格(space), 水平制表符(tab)和换行符(newline)的值
    0000003 
    

    演示 IFS 的用法

    #!/bin/bash
    
    line="root:x:0:0:root:/root:/bin/bash"
    oldIFS=$IFS
    IFS=":"
    count=0
    
    for item in $line; do
      [ $count -eq 0 ] && user=$item;
      [ $count -eq 6 ] && shell=$item;
      let count++
    done
    
    IFS=$oldIFS
    echo $user\'s shell is $shell
    

    输出:

    root's shell is /bin/bash
    

    迭代器

    for 循环

    for…in

    for var in list; do #list可以是一个字符串,也可以是一个序列(如:{a..z})
        #循环体
    done
    

    C 风格 for 循环

    for((i=0;i<10;i++)) {
        #循环体
    }
    

    while 循环

    while condition; do #condition为真,则进入循环;否则退出
        #循环体
    done
    

    until 循环

    x=0;
    until [ $x -eq 9 ]; do #x的值等于9时退出循环
        let x++; echo $x;
    done
    

    相关文章

      网友评论

          本文标题:1.16 字段分隔符和迭代器

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