- 读入多行字符串到变量
#!/bin/bash
read -r -d '' VAR <<EOM
aa
bb
cc
EOM
echo VAR="[$VAR]"
运行结果:
VAR=[aa
bb
cc]
- 读入多行字符串到数组变量
#!/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]
- 把数组变量元素拼接成单行串
#!/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,也就是读到文件结尾为止。
网友评论