Problem I'm trying to Solve
The problem I am trying to solve is being able to iterate through elements in two bash arrays as well as individual elements such that these elements are not stored previously as variables; they are declared on the spot:
for e in "$(seq -f "number-%g" 0 4) $(seq -f "number-%g" 5 9) number-10" ; do echo $e; done
When I execute this, I see:
$ for e in "$(seq -f "number-%g" 0 4) $(seq -f "number-%g" 5 9) number-10" ; do echo $e; done
number-0 number-1 number-2 number-3 number-4 number-5 number-6 number-7 number-8 number-9 number-10
it seems as is everything is printing out on the same line.
Resources I've consulted
I've read and experimented with resources on these pages:
- https://www.thegeekstuff.com/2010/06/bash-array-tutorial/ (Specifically the section: "13. Concatenation of two Bash Arrays")
- https://linuxhint.com/bash_range/
Experiments I've tried
Experiment 1
This stores the arrays in intermediate variables:
seq1="$(seq -f "number-%g" 0 4)"
seq2="$(seq -f "number-%g" 5 9)"
elem="number-10"
all=("${seq1[@]}" "${seq2[@]}" "${elem}")
Printing this out yields:
$ for e in $all; do echo $e; done
number-0
number-1
number-2
number-3
number-4
which seems to not pick up the second array or the last element.
Experiment 2
Here I explicitly store two arrays instead of generating them with seq
, however, I 1.) do not want to store intermediate variables for this question as per "problem I am trying to solve", and 2.) I want to use the seq
command as opposed to stating the arrays explicitly.
$ seq1=("number-0" "number-1" "number-2" "number-3" "number-4")
$ seq2=("number-5" "number-6" "number-7" "number-8" "number-9")
$ all=("${seq1[@]}" "${seq2[@]}" "number-10")
Printing this out along with "number-10" yields:
$ for e in "${all[@]}"; do echo $e; done
number-0
number-1
number-2
number-3
number-4
number-5
number-6
number-7
number-8
number-9
number-10
I look forward to hearing some bash tricks! Thanks!