c=('a' 'c')
n=(3 4)
for i in $(seq 0 $((${#c[*]}-1)))
do
echo ${c[i]} ${n[i]}
done
Potrebbe essere a volte più maneggevole.
Per spiegare la parte ugly
, come indicato nelle osservazioni:
seq 0 2 produce la sequenza numerica 0 1 2 $ (cmd) è la sostituzione di comando, quindi per questo esempio l'output di seq 0 2
, che è la sequenza numerica. Ma qual è il limite superiore, lo $((${#c[*]}-1))
?
$ ((somthing)) è l'espansione aritmetica, quindi $ ((3 + 4)) è 7 ecc. La nostra espressione è ${#c[*]}-1
, quindi qualcosa - 1. Molto semplice, se sappiamo cosa è ${#c[*]}
.
c è un array, c [*] è solo l'intero array, $ {# c [*]} è la dimensione dell'array che è 2 nel nostro caso. Ora riavvolgiamo tutto: for i in $(seq 0 $((${#c[*]}-1)))
è for i in $(seq 0 $((2-1)))
è for i in $(seq 0 1)
è for i in 0 1
. Poiché l'ultimo elemento dell'array ha un indice che corrisponde alla lunghezza dell'array - 1.
fonte
2012-03-15 11:22:28
Venendo da sfondo python Questa è una domanda davvero molto utile! –
guardando questo quattro anni dopo mi chiedo se non c'è ancora un modo migliore per farlo. Oh mio Dio. – Giszmo