3 581
contributi
(→Assegnazione dallo standard input: ampliamento istruzione read) |
|||
Riga 60: | Riga 60: | ||
Con l'istruzione <code>read</code> è possibile assegnare a una o più variabili il contenuto di una riga dello standard input, che senza redirezioni e pipe corrisponde a ciò che viene scritto da tastiera prima di un invio. | Con l'istruzione <code>read</code> è possibile assegnare a una o più variabili il contenuto di una riga dello standard input, che senza redirezioni e pipe corrisponde a ciò che viene scritto da tastiera prima di un invio. | ||
Sintassi (base): <code>read nomevariabile [ ... ]</code> | Sintassi (base):<br/> | ||
:<code>read [ -r ] nomevariabile [ ... ]</code> | |||
Il nome delle variabili non va preceduto da '''$''', proprio come nelle assegnazioni normali. Se sono presenti più nomi di variabile, la riga letta si divide in stringhe delimitate dai caratteri contenuti in <code>$IFS</code> (di default sono tre: spazio, tabulazione e invio), ma all'ultima variabile viene sempre assegnato tutto il contenuto rimanente fino a fine riga. | Il nome delle variabili non va preceduto da '''$''', proprio come nelle assegnazioni normali. Se sono presenti più nomi di variabile, la riga letta si divide in stringhe delimitate dai caratteri contenuti in <code>$IFS</code> (di default sono tre: spazio, tabulazione e invio), ma all'ultima variabile viene sempre assegnato tutto il contenuto rimanente fino a fine riga. | ||
Il carattere <code>\</code> è speciale e può essere utilizzato per inserire in una variabile un carattere contenuto in <code>$IFS</code> e/o più righe. Per inserirlo è una volta è quindi necessario digitare <code>\\</code>, in alternativa con l'opzione <code>-r</code> si può trattarlo normalmente. | |||
Esempio: | Esempio: | ||
Riga 78: | Riga 81: | ||
printf %s "Cognome, Nome, GG/MM/AAAA: " | printf %s "Cognome, Nome, GG/MM/AAAA: " | ||
# $IFS modificata solo per la durata dell'istruzione read | # $IFS modificata solo per la durata dell'istruzione read | ||
IFS="," read cognome nome data # legge cognome, nome e data, rimuovendo i separatori | IFS="," read -r 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 | # $IFS ripristinata al suo valore normale | ||
</pre> | |||
Oppure, per leggere un'intera riga in <code>$var</code>: | |||
<pre> | |||
IFS= read -r var | |||
</pre> | |||
E per permettere tramite <code>/</code> di scrivere anche più di una riga: | |||
<pre> | |||
IFS= read var | |||
</pre> | </pre> | ||
contributi