Stavo usando array associativi nel mio script, quindi li dichiaravo con il
typeset -A <array_name>
comando e ha funzionato bene nel prompt di bash
Ma quando lo uso nel mio script, ottengo il seguente errore
typeset: -A: invalid option
typeset: usage: typeset [-afFirtx] [-p] name[=value] ...
Anche per me sarà accettabile una soluzione alternativa.
SIDENOTE:ho provato typeset -a ma dichiara un array indicizzato. Ma voglio un array associativo.
Risposta accettata:
Questo è l'errore generato da Bash 3 per typeset -A
. Gli array associativi sono stati aggiunti in Bash 4 e non sono in Bash 3.2 e precedenti.
Sembra che il tuo script venga eseguito con una versione di Bash diversa da quella che stai utilizzando come shell. Se sei sulla stessa macchina in entrambi i casi, hai più versioni installate e probabilmente puoi selezionarne una con un percorso diverso. Se ti trovi su una macchina diversa che esegue lo script, potresti essere in grado di installare una versione più recente, ma per il resto non sei fortunato per il supporto diretto in Bash.
zsh
supporta array associativi da versioni molto precedenti, quindi se lo hai disponibile puoi probabilmente trasferire il tuo script senza troppo lavoro. Se non sei in grado di farlo, puoi falsificarlo con array regolari e grep
o utilizzando ${[email protected]}
e un insieme di variabili ordinarie, disponibile nelle versioni precedenti di Bash. ${[email protected]}
si espande ai nomi di tutte le variabili i cui nomi iniziano con prefix
, che puoi utilizzare in combinazione con diverse variabili prefix_key1
, prefix_another
per ottenere la maggior parte dei comportamenti degli array associativi.