bash处理多行字符串变量

2021-06-27  本文已影响0人  CodingCode
  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的解释

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",那么""被认为是一个转义字符,否则""就被认为是一个普通字符。

The first character of delim is used to terminate the input line, rather than newline.

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

上一篇 下一篇

猜你喜欢

热点阅读