2016-05-02 30 views
7

Dire che ho un array:Ottenere ultimo elemento in ordine di Bash

arr=(a b c d e f) 

Se voglio ottenere l'ultimo elemento dell'array, solito ho per ottenere il numero totale di elementi, sottrarre uno e l'uso che numero da chiamare come indice:

$ echo ${#arr[@]} 
6 
$ echo ${arr[${#arr[@]}-1]} 
f 

Tuttavia, I see che recentemente (Bash 4,2-4,3) è possibile utilizzare gli indici negativi:

$ echo ${arr[-1]} 
f 
$ echo ${arr[-2]} 
e 

Quindi mi chiedo: quando è stato introdotto? È anche utilizzabile da altre shell come ksh, zsh ...?

La mia ricerca mostra:

Bash-4.3-rc1 available for FTP

a. Risolto un bug che causava l'assegnazione a una variabile non impostata usando un pedice negativo per provocare un errore di segmentazione.

b. Risolto un bug che causava l'assegnazione a una variabile stringa usando un indice negativo per utilizzare l'indice errato.

...

x. La shell ora consente di assegnare, referenziare e disabilitare gli elementi di matrici indicizzate usando gli indici negativi (a [-1] = 2, echo $ {a [-1]}) che contano dall'ultimo elemento dell'array.

E Bash manual 4.3, on Arrays

Riferimenti una variabile array senza pedice equivale a riferimento con indice di 0. Se l'indice utilizzato per fare riferimento un elemento di un array indicizzato come risultato un numero inferiore di zero, viene interpretato come relativo a un maggiore dell'indice massimo di dell'array, quindi gli indici negativi contano dalla fine dell'array, e un indice di -1 fa riferimento all'ultimo elemento.

Ma mi chiedo se questo fosse già in Bash 4.2, poiché la prima risorsa menziona un bug corretto.

+1

Bello, controllare un palindromo è diventato molto più facile ora. – sjsam

+1

Per rispondere alla tua altra domanda: è anche in zsh. Non so di ksh. – user1934428

risposta

4

Per quanto posso vedere in https://tiswww.case.edu/php/chet/bash/CHANGES, la nuova funzionalità è in questa parte: Dettagli

Questo documento le modifiche tra questa versione, bash-4.3-alpha, e la versione precedente, bash -4.2-release.

...

x. La shell ora consente di assegnare, referenziare e disabilitare gli elementi degli array indicizzati usando gli indici negativi (a [-1] = 2, echo $ {a [-1]}) che contano dall'ultimo elemento dell'array.

La correzione in:

Questo documento contiene le modifiche tra questa versione, bash-4.3-beta2, e theprevious versione, bash-4.3-beta.

1 Modifiche alla bash

a. Risolto un bug che causava l'assegnazione di a una variabile non impostata utilizzando un indice negativo per provocare un errore di segmentazione.

b. Risolto un bug che causava l'assegnazione a una variabile stringa usando un indice negativo per usare l'indice errato.

È una correzione di una nuova funzionalità in Bash 4.3.