zoukankan      html  css  js  c++  java
  • Linux 文件的行遍历

    #!/bin/bash
    
    # 字符串拼接专题
    
    name="Shell"
    url="http://c.biancheng.net/shell/"
    
    str1=$name$url  #中间不能有空格
    str2="$name $url"  #如果被双引号包围,那么中间可以有空格
    str3=$name": "$url  #中间可以出现别的字符串
    str4="$name: $url"  #这样写也可以
    str5="${name}Script: ${url}index.html"  #这个时候需要给变量名加上大括号
    
    echo "==========方式一========="
    
    context='start
    '
    # 文件读取方式一
    cat '1.c' | while read line
    do
        echo ${line}
        context="${context}${line}"
    done
    
    # 无法打印出文件中的任何内容
    :<<!
    使用的是管道符号,这使得while语句在子shell中执行,这意味着while语句内部设置的变量、数组、函数等在循环外部都不再生效。
    例如:echo haha | a=5,在命令执行结束后,变量a的值也不再是5。
    !
    
    echo $context
    
    echo "==========方式二========="
    
    # 文件读取方式二
    
    while read line
    do
        echo ${line}
        context="${context}${line}"'
    '
    done < '1.c'
    
    #成功给context赋值
    echo -e $context

    特别说明:

    如果被读的文件最后一行之后没有换行符 ,则read读取最后一行时遇到文件结束符EOF,循环即终止。

    虽然,此时$line内存有最后一行,但程序已经没有机会再处理此行内容

    解决方案

    while read line || [[ -n ${line} ]]

    这样当文件没有到最后一行时不会测试-n $line,当遇到文件结束(最后一行)时,仍然可以通过测试$line是否有内容来进行继续处理。

  • 相关阅读:
    bzoj 3036: 绿豆蛙的归宿
    bzoj 2956: 模积和 ——数论
    bzoj 4378: [POI2015]Logistyka ——树桩数组+离散化
    Codeforces Round #441 Div. 2题解
    es 学习笔记
    Redis 热点key
    深入拆解Tomcat &Jetty——极客时间
    mysql 行转列
    在kafka connect 同步 mysql 主从数据库
    使用Kafka Connect 导入导出数据
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/13232572.html
Copyright © 2011-2022 走看看