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是否有内容来进行继续处理。

  • 相关阅读:
    BZOJ3483 : SGU505 Prefixes and suffixes(询问在线版)
    BZOJ3067 : Hyperdrome
    BZOJ3461 : Jry的时间表
    BZOJ3024 : [Balkan2012]balls
    BZOJ1111 : [POI2007]四进制的天平Wag
    BZOJ1107 : [POI2007]驾驶考试egz
    BZOJ1109 : [POI2007]堆积木Klo
    BZOJ4158 : [POI2007]Railway
    BZOJ1110 : [POI2007]砝码Odw
    BZOJ1105 : [POI2007]石头花园SKA
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/13232572.html
Copyright © 2011-2022 走看看