Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove the last element from an array

Tags:

arrays

bash

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.

like image 493
k-man Avatar asked Nov 23 '11 18:11

k-man


People also ask

How do you insert and remove the last element of an array?

The array_pop() function, which is used to remove the last element from an array, returns the removed element.

How do you remove the last two elements of an array?

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.


1 Answers

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

like image 87
sehe Avatar answered Sep 17 '22 15:09

sehe