Bash scripting - variabili - stringhe: differenze tra le versioni

→‎Assegnazione dallo standard input: ampliamento istruzione read
(→‎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 ','
                                  # 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>


3 581

contributi