3 581
contributi
(uso di shift) |
m (aggiunta parte su $IFS) |
||
Riga 68: | Riga 68: | ||
read testo | read testo | ||
printf %s\\n "Hai scritto: ${testo}" | printf %s\\n "Hai scritto: ${testo}" | ||
</pre> | |||
Se si vogliono modificare i delimitatori, anziché modificare <code>$IFS</code>, che avrebbe effetti anche riguardo la separazione delle stringhe, è necessario assegnarlo sulla stessa riga dell'istruzione, in modo che sia poi ripristinato al suo valore precedente. Anche così facendo l'istruzione <code>read</code> si fermerà comunque al primo "a capo" trovato. | |||
Per esempio: | |||
<pre> | |||
printf %s\\n "Scrivi cognome, nome e data di nascita, separati da ',' e premi INVIO." | |||
printf %s "Cognome, Nome, GG/MM/AAAA: " | |||
# $IFS modificata solo per la durata dell'istruzione read | |||
IFS="," read cognome nome data # legge cognome, nome e data, rimuovendo i separatori | |||
# a $nome assegna anche nomi multipli, finché non trova ',' | |||
# $IFS ripristinata al suo valore normale | |||
</pre> | </pre> | ||
Riga 107: | Riga 119: | ||
==Espansione di variabile== | ==Espansione di variabile== | ||
I caratteri utilizzati per la divisione di una stringa in più stringhe sono quelli contenuti nella variabile <code>$IFS</code> (di default appunto: spazio, tabulazione e "a capo"), ed è consigliabile non modificarla, se non eventualmente prima di <code>read</code>, per non alterare il normale funzionamento di uno script. | |||
Con l'unica eccezione dell'assegnazione, quando si accede al contenuto di una variabile senza quotarla, questa può essere trasformata in più di una singola stringa ('''esplosione''') in base agli spazi (e tabulazioni e "a capo") contenuti, e perfino in "niente" se è vuota. "Niente" proprio come se non presente nel codice. | Con l'unica eccezione dell'assegnazione, quando si accede al contenuto di una variabile senza quotarla, questa può essere trasformata in più di una singola stringa ('''esplosione''') in base agli spazi (e tabulazioni e "a capo") contenuti, e perfino in "niente" se è vuota. "Niente" proprio come se non presente nel codice. | ||
contributi