I tried the += operator to append an array in bash but do not know why it did not work
#!/bin/bash
i=0
args=()
while [ $i -lt 5 ]; do
args+=("${i}")
echo "${args}"
let i=i+1
done
expected results
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
actual results
0
0
0
0
0
Any help would be appreciated.
To append element(s) to an array in Bash, use += operator.
Using shorthand operators is the simplest way to append an element at the end of an array. In the following script, an array with 6 elements is declared. Next '+=' shorthand operator is used to insert a new element at the end of the array. 'for' loop is used here to iterate the array and print the array elements.
$1 means an input argument and -z means non-defined or empty. You're testing whether an input argument to the script was defined when running the script.
It did work, but you're only echoing the first element of the array. Use this instead:
echo "${args[@]}"
Bash's syntax for arrays is confusing. Use ${args[@]}
to get all the elements of the array. Using ${args}
is equivalent to ${args[0]}
, which gets the first element (at index 0).
See ShellCheck: Expanding an array without an index only gives the first element.
Also btw you can simplify let i=i+1
to ((i++))
, but it's even simpler to use a C-style for
loop. And also you don't need to define args
before adding to it.
So:
#!/bin/bash
for ((i=0; i<5; ++i)); do
args+=($i)
echo "${args[@]}"
done
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With