Bash tips: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
Riga 185: Riga 185:
; <code>$!</code> : PID dell'ultimo job in background.
; <code>$!</code> : PID dell'ultimo job in background.


=== Manipolazione delle stringhe ===
=== Altre variabili ===
Nelle shell *nix, storicamente, la manipolazione delle stringhe viene fatto attraverso programmi esterni alla shell come sed, awk e perl. Questi programmi vengono ancora usati quando si vuole mantenere la compatibilità con la shell <code>'''sh'''</code> (''POSIX''), tuttavia imparare anche il solo sed (il più semplice dei tre) non è cosa immediata.
 
Se si usa Bash, non è necessario usare nessun programma esterno, ma basta imparare i tre operatori fondamentali ed alcuni concetti di base, per poter fare tutte le manipolazioni più comuni.


In Bash ogni variabile (di default) è trattata come una stringa, e un nome di variabile ammette soltanto caratteri alfabetici (maiuscoli e minuscoli), l'underscore "_" e numeri (questi ultimi purché non in prima posizione).
In Bash ogni variabile (di default) è trattata come una stringa, e un nome di variabile ammette soltanto caratteri alfabetici (maiuscoli e minuscoli), l'underscore "_" e numeri (questi ultimi purché non in prima posizione).
Riga 202: Riga 199:
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.
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:
=== Manipolazione delle stringhe ===
Nelle shell *nix, storicamente, la manipolazione delle stringhe viene fatto attraverso programmi esterni alla shell come sed, awk e perl. Questi programmi vengono ancora usati quando si vuole mantenere la compatibilità con la shell <code>'''sh'''</code> (''POSIX''), tuttavia imparare anche il solo sed (il più semplice dei tre) non è cosa immediata.
 
Se si usa Bash non è necessario usare nessun programma esterno, ma basta imparare i tre operatori fondamentali ed alcuni concetti di base, per poter fare tutte le manipolazioni più comuni direttamente sulle variabili.
 
Si assegna una stringa a una variabile e accedendola tramite la forma con le graffe, si può ricorrere a un modificatore che manipola la stringa (senza modificare il contenuto della variabile), ad esempio:


  VAR="stringa-di-esempio"
  VAR="stringa-di-esempio"
  echo ${VAR#stringa-}
  echo ${VAR#stringa-}


elimina "stringa-" dall'inizio della variabile.
ritorna il contenuto della variable VAR senza il prefisso "stringa-". VAR non viene modificata, salvo una nuova assegnazione:
 
VAR=${var#stringa-}
echo $VAR
 
ora il prefisso "stringa-" è stato eliminato anche dalla variabile VAR.


I modificatori sono molti, ma possono essere facilmente ricordati se si imparano i tre fondamentali:
I modificatori sono molti, ma possono essere facilmente ricordati se si imparano i tre fondamentali: