2013-08-14 18 views

risposta

1

È possibile utilizzare eval:

#!/bin/bash 
array_0=(1 2 3) 
array_1=(4 5 6) 
array_2=(7 8 9) 
for a in {0..2} ; do 
    for i in {0..2} ; do 
    eval 'echo ${'"array_$a[$i]"'}' 
    done 
done 

Vaughn sintassi di Catone è leggermente più prolisso, ma la dichiarazione echo in sé è più decifrabili. Si sostituisce la parte interna della doppia for ciclo con queste due righe:

array_a=array_$a[$i] 
    echo ${!array_a} 
+0

Sai cosa succede se uno stesso è un array. Per esempio, sostituisco $ a con $ {array_2 [$ j]} –

+0

@HaoShen: non ci dovrebbero essere problemi a farlo, per entrambe le soluzioni. – jxh

+0

Ciao, grazie mille. Sono rimasto bloccato. Cosa succede se voglio assegnare il risultato a una variabile. Ad esempio, eval 'result = $ {' "array_ $ a [$ i]" '}'. Scusa per la mia continua domanda ingenua ... –

1

È possibile utilizzare eval

echo $(eval echo \${array_$a[0]}) 

Si noti che ho dovuto mettere un backslash davanti al primo segno di dollaro per evitare la shell dall'interpolarsi.

Inutile dire che l'intero scopo di array è quello di permettere di eseguire questo tipo di interpolazione variabile senza tutta la confusione e fastidio di evals riecheggiando come ho dovuto fare quando bisogno array con lo shell originale Bourne.

5

Una cosa che si può fare è quella di utilizzare la seguente sintassi:

array_a=array_$a[0] 
echo ${!array_a} 

Il ! come primo carattere indica che si desidera utilizzare un ulteriore livello di indirezione valutando la variabile e quindi utilizzando il risultato come espressione.

Problemi correlati