I want to remove the last entry in my array, and I want the array to show me that it has 1 less entry when I am using the ${#array[@]}
. This is the current line I am using:
unset GreppedURLs[${#GreppedURLs[@]} -1]
Please correct me and show me the right way.
The array_pop() function, which is used to remove the last element from an array, returns the removed element.
Use the splice() method to remove the last 2 elements from an array, e.g. arr. splice(arr. length - 2, 2) . The splice method will delete the 2 last elements from the array and return a new array containing the deleted elements.
The answer you have is (nearly) correct for non-sparse indexed arrays¹:
unset 'arr[${#arr[@]}-1]'
Bash 4.3 or higher added this new syntax to do the same:
unset arr[-1]
(Note the single quotes: they prevent pathname expansion).
Demo:
arr=( a b c ) echo ${#arr[@]}
3
for a in "${arr[@]}"; do echo "$a"; done
a b c
unset 'arr[${#arr[@]}-1]' for a in "${arr[@]}"; do echo "$a"; done
a b
Punchline
echo ${#arr[@]}
2
(GNU bash, version 4.2.8(1)-release (x86_64-pc-linux-gnu))
¹ @Wil provided an excellent answer that works for all kinds of arrays
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