How can I read lines from the standard input into an array and then concatenate the array with itself?
My code is:
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[@]}"
Note that, I can print it thrice like the code below, but it is not my motto. I have to concatenate them in the array.
countries=()
while read -r country; do
countries+=( "$country" )
done
echo "${countries[@]} ${countries[@]} ${countries[@]}"
First, to read your list into an array, one entry per line:
readarray -t countries
...or, with older versions of bash:
# same, but compatible with bash 3.x; || is to avoid non-zero exit status.
IFS=$'\n' read -r -d '' countries || (( ${#countries[@]} ))
Second, to duplicate the entries, either expand the array to itself three times:
countries=( "${countries[@]}" "${countries[@]}" "${countries[@]}" )
...or use the modern syntax for performing an append:
countries+=( "${countries[@]}" "${countries[@]}" )