Guida avanzata di scripting Bash: Un'approfondita esplorazione dell'arte dello scripting di shell | ||
---|---|---|
Indietro | Avanti |
Le variabili rappresentano il modo in cui i linguaggi di scripting e di programmazione identificano i dati. Una variabile non è nient'altro che un'etichetta, un nome assegnato a una locazione, o a una serie di locazioni, di memoria del computer che contiene un dato.
Le variabili compaiono nelle operazioni aritmetiche, nelle manipolazioni quantitative e nelle verifiche di stringhe.
Il nome di una variabile è il contenitore del suo valore, il dato memorizzato. Il riferimento a questo valore è chiamato sostituzione di variabile.
Bisogna fare una netta distinzione tra il nome di una variabile ed il suo valore. Se variabile1 è il nome di una variabile, allora $variable1 è il riferimento al suo valore, il dato in essa contenuto.
bash$ variabile=23 bash$ echo variabile variabile bash$ echo $variabile 23 |
L'unica volta in cui una variabile compare "nuda"
-- senza il prefisso $ -- è quando viene
dichiarata o al momento dell'assegnamento, quando viene
annullata, quando viene
esportata, o nel caso
particolare di una variabile che rappresenta un
segnale (vedi
Esempio 29-5). L'assegnamento può essere
fatto con l'= (come in
var1=27
), con un enunciato
read ed all'inizio di un ciclo
(for var2 in 1 2 3
).
Racchiudere il nome della variabile tra doppi apici (" ") non interferisce con la sostituzione di variabile. Questo viene chiamato quoting parziale, o anche "quoting debole". Al contrario, l'utilizzo degli apici singoli (' ') fa sì che il nome della variabile venga interpretato letteralmente, per cui la sostituzione non avverrà. In questo caso si ha il quoting pieno, chiamato anche "quoting forte". Vedi Capitolo 5 per una trattazione dettagliata.
È da notare che $variabile in realtà è una forma semplificata ed alternativa di ${variabile}. In contesti in cui la sintassi $variabile può provocare un errore, la forma estesa potrebbe funzionare (vedi la Sezione 9.3, più oltre).
Esempio 4-1. Assegnamento e sostituzione di variabile
#!/bin/bash # Variabili: assegnamento e sostituzione a=375 ciao=$a #---------------------------------------------------------------------------- # Quando si inizializzano le variabili, non sono consentiti spazi prima #+ e dopo il segno =. # Cosa succederebbe se ce ne fosse uno? # Nel caso "VARIABILE =valore", # ^ #% Lo script cerca di eseguire il comando "VARIABILE" con l'argomento #+ "=valore". # Nel caso "VARIABILE= valore", # ^ #% Lo script cerca di eseguire il comando "valore" con la variabile #+ d'ambiente "VARIABILE" impostata a "". #---------------------------------------------------------------------------- echo ciao # Non è un riferimento a variabile, ma solo la stringa "ciao". echo $ciao echo ${ciao} # Come sopra. echo "$ciao" echo "${ciao}" echo ciao="A B C D" echo $ciao # A B C D echo "$ciao" # A B C D # Come si può vedere, echo $ciao e echo "$ciao" producono #+ risultati differenti. # =============================================== # Il quoting di una variabile preserva gli spazi. # =============================================== echo echo '$ciao' # $ciao # ^ ^ # Gli apici singoli disabilitano la referenziazione alla variabile, #+ perché il simbolo "$" viene interpretato letteralmente. # Notate l'effetto dei differenti tipi di quoting. ciao= # Imposta la variabile al valore nullo. echo "\$ciao (valore nullo) = $ciao" # Attenzione, impostare una variabile al valore nullo non è la stessa #+ cosa di annullarla, sebbene il risultato finale sia lo stesso (vedi oltre). # # -------------------------------------------------------------- # # È consentito impostare più variabili sulla stessa riga, #+ separandole con uno spazio. # Attenzione, questa forma può diminuire la leggibilità #+ e potrebbe non essere portabile. var1=21 var2=22 var3=$V3 echo echo "var1=$var1 var2=$var2 var3=$var3" # Potrebbe causare problemi con le versioni più vecchie di "sh". . . # -------------------------------------------------------------- echo; echo numeri="uno due tre" # ^ ^ altri_numeri="1 2 3" # ^ ^ # Se ci sono degli spazi all'interno di una variabile, #+ allora è necessario il quoting. # altri_numeri=1 2 3 # Dà un messaggio d'errore. echo "numeri = $numeri" echo "altri_numeri = $altri_numeri" # altri_numeri = 1 2 3 # Funziona anche l'escaping degli spazi. miscuglio=2\ ---\ Altro # ^ ^ Spazio dopo il carattere di escape (\). echo "$miscuglio" # 2 --- Altro echo; echo echo "variabile_non_inizializzata = $variabile_non_inizializzata" # Una variabile non inizializzata ha valore nullo (nessun valore). variabile_non_inizializzata= # Viene dichiarata, ma non inizializzata - #+ è come impostarla al valore nullo, #+ vedi sopra. echo "variabile_non_inizializzata = $variabile_non_inizializzata" # Ha ancora valore nullo. variabile_non_inizializzata=23 # È impostata. unset variabile_non_inizializzata # Viene annullata. echo "variabile_non_inizializzata = $variabile_non_inizializzata" # Ha ancora valore nullo. echo exit 0 |
Una variabile non inizializzata ha valore "nullo": cioè proprio nessun valore (non zero!). Utilizzare una variabile prima di averle assegnato un valore, solitamente provoca dei problemi. Ciò nonostante è possibile eseguire operazioni aritmetiche su una variabile non inizializzata.
|