Bash scripting - variabili - stringhe: differenze tra le versioni

m
aggiunta parte su $IFS
(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.


3 581

contributi