Bash tips: differenze tra le versioni

m
Riga 193: Riga 193:
Si indica dunque con <code>${nome}</code> oppure con la forma abbreviata <code>$nome</code>. Si noti che la forma abbreviata considera il nome della variabile come composto da tutti i caratteri validi incontrati (per esempio <code>"$nome$cognome"</code> è equivalente a <code>"${nome}${cognome}"</code>, ma <code>"$nome_$cognome"</code> non lo è a <code>"${nome}_${cognome}"</code> perché <code>nome_</code> sarebbe un nome di variabile valido). In caso di concatenazione di variabili è preferibile accedere alle variabili con le graffe, o in alternativa delimitare dalle virgolette o da un carattere '''\''' (per esempio: <code>"$nome"_"$cognome"</code> e <code>"$nome\_$cognome"</code> corrisponde a <code>"${nome}_${cognome}"</code>).
Si indica dunque con <code>${nome}</code> oppure con la forma abbreviata <code>$nome</code>. Si noti che la forma abbreviata considera il nome della variabile come composto da tutti i caratteri validi incontrati (per esempio <code>"$nome$cognome"</code> è equivalente a <code>"${nome}${cognome}"</code>, ma <code>"$nome_$cognome"</code> non lo è a <code>"${nome}_${cognome}"</code> perché <code>nome_</code> sarebbe un nome di variabile valido). In caso di concatenazione di variabili è preferibile accedere alle variabili con le graffe, o in alternativa delimitare dalle virgolette o da un carattere '''\''' (per esempio: <code>"$nome"_"$cognome"</code> e <code>"$nome\_$cognome"</code> corrisponde a <code>"${nome}_${cognome}"</code>).


È bene notare che quando si accede al contenuto di una variabile senza quotarla, questa può essere trasformata in più di una singola stringa, in base agli spazi contenuti, e perfino in "niente" se è vuota ("niente" proprio come se non presente nel codice). Se invece si vuole sempre considerare il contenuto della variabile come una singola stringa, è necessario accederla quotata (tra virgolette), ossia con "$variabile" oppure "${variabile}". Questo fatto è di particolare importanza quando si utilizza la variabile in una condizione ([ ... ], test ..., ecc...), perché la variabile potrebbe essere sostituita da più di una stringa o perfino da nessuna; e anche quando la si passa a un comando, in particolare se agisce su un file indicato dalla variabile, che potrebbe venir trattato come più di un file. L'utilità nel non quotarla d'altra parte consiste nella possibilità di assegnare tutte le opzioni da passare a un comando a una singola variabile, accedendovi in seguito per passargli tutte le stringhe (o nessuna stringa, se lasciata vuota) in una volta sola.
Nelle assegnazioni è superfluo l'uso delle virgolette, salvo concatenazioni in cui è preferibile l'uso di virgolette e graffe:
<pre> variabile=$altra_variabile
variabile=${altra_variabile}              # equivalente a sopra
variabile="${var1} testo ${var2}_${var3}" # più chiaro e permette concantenazioni con spazi
</pre>
ma è bene notare che in tutti gli altri casi, quando si accede al contenuto di una variabile senza quotarla, questa può essere trasformata in più di una singola stringa, in base agli spazi contenuti, e perfino in "niente" se è vuota ("niente" proprio come se non presente nel codice). Se invece si vuole sempre considerare il contenuto della variabile come una singola stringa, è necessario accederla quotata (tra virgolette), ossia con <code>"$variabile"</code> oppure <code>"${variabile}"</code>.
 
Questo fatto è di particolare importanza quando si utilizza la variabile in una condizione ([ ... ], test ..., ecc...), perché la variabile potrebbe essere sostituita da più di una stringa o perfino da nessuna; e anche quando la si passa a un comando, in particolare se agisce su un file indicato dalla variabile, che potrebbe venir trattato come più di un file. L'utilità nel non quotarla d'altra parte consiste nella possibilità di assegnare tutte le opzioni da passare a un comando, se sono stringhe senza spazi, a una singola variabile, così da passare al comando tutte le stringhe (o nessuna stringa se lasciata vuota) in una volta sola.


Il nome dentro le graffe inoltre può essere seguito da un modificatore che manipola la variabile, ad esempio:
Il nome dentro le graffe inoltre può essere seguito da un modificatore che manipola la variabile, ad esempio:
3 581

contributi