Due cose, prima questa è la mia prima domanda in questo forum e mi scuso se la formazione è dappertutto. Secondo, non ho scritto molti script di bash, e tra un copione e l'altro produco un tempo piuttosto lungo.
Detto questo, ecco la mia domanda.
E 'possibile fare qualcosa di simile in bash (Cancella array $ array contiene):
$array=()
Fondamentalmente questo è quello che vorrei fare. Ho una variabile con i nomi delle variabili matrice in esso:
array1=()
array2=()
arrayList="array1 array2"
# In a function far far away
for array in $arrayList
do
eval arr=("\"\${$array[@]\"")
for index in ${!arr[@]}
do
echo "${arr[$index]}"
done
# Here is the big "?", I like to clear the array that $array refers to.
$array=()
done
mie matrici contengono stringhe che includono "" (spazio) e questo è il motivo per cui io uso la dichiarazione
eval
. Non sono sicuro che sia necessario ma almeno funziona. La sceneggiatura è più o meno funzionante come lo voglio anch'io, ma ho bisogno di cancellare gli array nello $arrayList
, e preferisco non inserirla con un hardcode da qualche parte, anche se sarebbe facile.
Grazie in anticipo.
Vedi http://mywiki.wooledge.org/BashFAQ/048 re: uso di eval - la forma abbreviata è che non è una pratica consigliata. –
Grazie per il link! Ho letto che "eval" non è un modo raccomandato di andare visto che è possibile iniettare cose cattive, o anche fare cose stupide da soli se non si presta attenzione a ciò che si evita. Prenderò in considerazione la possibilità di scambiarlo per un'altra soluzione, anche se questo script verrà utilizzato solo da me. – Qben
Forse quello che vuoi veramente sono gli array associativi. Sono disponibili in bash 4. – Dunes