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.
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.
Bello, controllare un palindromo è diventato molto più facile ora. – sjsam
Per rispondere alla tua altra domanda: è anche in zsh. Non so di ksh. – user1934428