如何连接 bash 中的数组?
How to concatenate arrays in bash?
我是 Bash 的新手。我有一个从标准输入获取输入的数组。我必须将自己连接两次。说,我在数组中有以下元素:
Namibia
Nauru
Nepal
Netherlands
NewZealand
Nicaragua
Niger
Nigeria
NorthKorea
Norway
现在,输出应该是:
Namibia Nauru Nepal Netherlands NewZealand Nicaragua Niger Nigeria NorthKorea Norway Namibia Nauru Nepal Netherlands NewZealand Nicaragua Niger Nigeria NorthKorea Norway
我的代码是:
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[@]}"
首先,将您的列表读入一个数组,每行一个条目:
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[@]}" )
就这么写:
countries=$(cat)
countries+=( "${countries[@]}" "${countries[@]}" )
echo ${countries[@]}
第一行是获取输入数组,第二行是连接数组,最后一行是打印数组。
在 ubuntu 14.04 上,以下将连接三个元素(元素计数将给出 :3),每个元素都是一个数组 countries
:
countries=( "${countries[@]}" "${countries[@]}" "${countries[@]}" )
而下面的内容会将所有元素连接到一个数组中:
countries=( ${countries[*]} ${countries[*]} ${countries[*]} )
计数为 30(考虑到原始 post 中指定的国家/地区)。
我是 Bash 的新手。我有一个从标准输入获取输入的数组。我必须将自己连接两次。说,我在数组中有以下元素:
Namibia
Nauru
Nepal
Netherlands
NewZealand
Nicaragua
Niger
Nigeria
NorthKorea
Norway
现在,输出应该是:
Namibia Nauru Nepal Netherlands NewZealand Nicaragua Niger Nigeria NorthKorea Norway Namibia Nauru Nepal Netherlands NewZealand Nicaragua Niger Nigeria NorthKorea Norway
我的代码是:
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[@]}"
首先,将您的列表读入一个数组,每行一个条目:
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[@]}" )
就这么写:
countries=$(cat)
countries+=( "${countries[@]}" "${countries[@]}" )
echo ${countries[@]}
第一行是获取输入数组,第二行是连接数组,最后一行是打印数组。
在 ubuntu 14.04 上,以下将连接三个元素(元素计数将给出 :3),每个元素都是一个数组 countries
:
countries=( "${countries[@]}" "${countries[@]}" "${countries[@]}" )
而下面的内容会将所有元素连接到一个数组中:
countries=( ${countries[*]} ${countries[*]} ${countries[*]} )
计数为 30(考虑到原始 post 中指定的国家/地区)。