Sto graffiando la mia testa su questo, non riesco a trovare il riferimento bash a parlarne.
Nel codice qui sotto
host_color=${uphost}_host_color
host_color=${!host_color}
Qual è la seconda linea facendo? cosa fa l'operatore! in questo caso?
Sto graffiando la mia testa su questo, non riesco a trovare il riferimento bash a parlarne.
Nel codice qui sotto
host_color=${uphost}_host_color
host_color=${!host_color}
Qual è la seconda linea facendo? cosa fa l'operatore! in questo caso?
Questo è un modulo breve per indirect references.
$ foo=bar
$ bar=bas
$ echo ${!foo}
bas
La costruzione apparentemente simile ${!foo*} espande per i nomi di tutte le variabili il cui nome inizia con foo:
$ foo1=x
$ foo2=y
$ echo ${!foo*}
foo1 foo2
Dal b ash manual: (!)
Se il primo carattere di parametro è un punto esclamativo, si introduce un livello di riferimento indiretto variabile . Bash utilizza il valore di la variabile formata dal resto del parametro come nome della variabile ; questa variabile viene quindi espansa e tale valore viene utilizzato nel resto della sostituzione anziché nel valore del parametro stesso. Questo è noto come espansione indiretta. Le eccezioni a questo sono le espansioni di $ {! Prefix *} e $ {! Name [@]} descritte di seguito.
è $ lo stesso di $ {prefix *!} {Prefix!}? –
Ho pensato che sarebbe stata la prossima voce nella manpage dato che @ il post di Oliver non ha il "*" o "@": '$ {! Name [@]} -" Se ** name ** è un array variabile, si espande alla lista di indici di array (chiavi) assegnati nel nome.Se ** nome ** non è una matrice, si espande a 0 se ** nome ** è impostato. " –
@Olivier: no, non sono la stessa cosa. Ho aggiunto i bit rilevanti dal manuale di bash. –
Hai capito, grazie. Ora ha senso, host_color = verde, il verde è un'altra variabile con il codice colore. –
+1 Sembra essere ciò che @ sta facendo il codice di Oliver - fondamentalmente impostando 'host_color' sul valore di' $ {uphost} _host_color'. Non è diverso dal settaggio di '$ {$ {stemost} _host_color}', giusto? –