美文网首页
bash处理多行字符串变量

bash处理多行字符串变量

作者: CodingCode | 来源:发表于2021-06-27 02:40 被阅读0次
    1. 读入多行字符串到变量
    #!/bin/bash
    
    read -r -d '' VAR <<EOM
    aa
    bb
    cc
    EOM
    
    echo VAR="[$VAR]"
    

    运行结果:

    VAR=[aa
    bb
    cc]
    
    1. 读入多行字符串到数组变量
    #!/bin/bash
    
    read -r -d '' -a VAR <<EOM
    aa
    bb
    cc
    EOM
    
    echo LEN="[${#VAR[@]}]"
    for VAR in "${VAR[@]}"; do
        echo "VAR=[${VAR}]"
    done
    

    运行结果:

    LEN=[3]
    VAR=[aa]
    VAR=[bb]
    VAR=[cc]
    

    2.2 如何把多行变量转出数组

    #!/bin/bash
    
    read -r -d '' VAR <<EOM
    aa
    bb
    cc
    EOM
    read -r -d '' -a AVAR <<< ${VAR}
    
    echo LEN="[${#AVAR[@]}]"
    for VAR in "${AVAR[@]}"; do
        echo "VAR=[${VAR}]"
    done
    

    这里VAR是一个多行字符串变量,AVAR是一个数组变量。
    运行结果:

    LEN=[3]
    VAR=[aa]
    VAR=[bb]
    VAR=[cc]
    
    1. 把数组变量元素拼接成单行串
    #!/bin/bash
    
    AVAR=(aa bb cc)
    VAR=$(IFS=','; echo "${AVAR[*]}")
    echo VAR="[$VAR]"
    

    运行结果:

    VAR=[aa,bb,cc]
    

    补充一点,关于read命令行参数-r和-d的解释

    • -r
      原文解释:
    Backslash  does  not  act  as an escape character. 
    The backslash is considered to be part of the line.
    In particular, a backslash-newline pair may not be used as a line continuation.
    

    意思很简单,就是如何处理转义字符(”\“),如果没有"-r",那么""被认为是一个转义字符,否则""就被认为是一个普通字符。

    • -d delim
      原文解释:
    The first character of delim is used to terminate the input line, rather than newline.
    

    所以delim的缺省值是换行符,否则就是delim的第一个字符;read一直读到遇到delim为止,就不再往下继续读了。
    如果指定-d '',即delim是一个空串,那么read会认为delim的第一个字符是0,也就是读到文件结尾为止。

    相关文章

      网友评论

          本文标题:bash处理多行字符串变量

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