Espandi indirettamente le variabili nella shell


9

Devo fare riferimento indirettamente a una variabile nella bashshell.

Fondamentalmente voglio quello che puoi fare makescrivendo $($(var)).

Ho provato a utilizzare ${$var}quale sarebbe la soluzione più semplice bashma poi ottengo questo errore:

bash: ${$var}: bad substitution

C'è un modo per fare questo?

Quello che sto cercando di fare è per iterare su tutti gli argomenti ( $1, $2, $3, ...) per un programma utilizzando una variabile di iterazione e non posso fare questo senza indirezione.

Risposte:


13

Se hai var1=fooe foo=bar, puoi farlo bardicendo ${!var1}. Tuttavia, se si desidera scorrere i parametri posizionali, è quasi sicuramente meglio farlo

for i in "$@"; do
    # something
done

C'è un modo per aggiungere più livelli di riferimento indiretto?
wefwefa3,

1
Non che riesca a trovare rapidamente. L'ovvia supposizione di ${!!var1}non funziona. Tuttavia, puoi sempre farlo manualmente, ad es tmp=${!var1}; echo ${!tmp}.
Tom Hunt,

3

Utilizzando /bin/bash:

foo=bar
test=foo
echo ${!test}

# prints -> bar
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.