shell 如何在bash中连接数组?

7vux5j2d  于 2023-03-19  发布在  Shell
关注(0)|答案(3)|浏览(110)

如何将行从标准输入读入数组,然后将数组与其自身连接起来?
我的代码是:

countries=()
while read -r country; do
    countries+=( "$country" )
done
countries=countries+countries+countries # this is the wrong way, i want to know the right way to do it
echo "${countries[@]}"

注意,我可以像下面的代码一样打印三次,但这不是我的座右铭,我必须在数组中连接它们。

countries=()
while read -r country; do
    countries+=( "$country" )
done
echo "${countries[@]} ${countries[@]} ${countries[@]}"
siotufzp

siotufzp1#

首先,将列表读入数组,每行一个条目:

readarray -t countries

...或者,对于旧版本的bash:

# same, but compatible with bash 3.x; || is to avoid non-zero exit status.
IFS=$'\n' read -r -d '' countries || (( ${#countries[@]} ))

其次,要复制条目,请将数组扩展到自身三次:

countries=( "${countries[@]}" "${countries[@]}" "${countries[@]}" )

...或使用现代语法执行追加:

countries+=( "${countries[@]}" "${countries[@]}" )
643ylb08

643ylb082#

简单地写这个:

countries=$(cat)
countries+=( "${countries[@]}" "${countries[@]}" )
echo ${countries[@]}

第一行是输入数组,第二行是连接,最后一行是打印数组。

jm2pwxwz

jm2pwxwz3#

在ubuntu14.04上,下面将连接三个元素(元素计数将给予:3),每个元素是数组countries

countries=( "${countries[@]}" "${countries[@]}" "${countries[@]}" )

而下面的代码将所有元素连接在一个数组中:

countries=( ${countries[*]} ${countries[*]} ${countries[*]} )

这一数目为30个(考虑到原员额所列国家)。

相关问题