Bash scripting - caratteri di escape: differenze tra le versioni

m
nessun oggetto della modifica
mNessun oggetto della modifica
 
(2 versioni intermedie di 2 utenti non mostrate)
Riga 1: Riga 1:
{{Bash_scripting}}
{{Bash scripting}}
=Caratteri di escape, apici e virgolette=
__TOC__
Alcuni caratteri hanno un valore speciale per la shell, per consentire le espansioni o determinati costrutti. Di conseguenza se si intende scrivere il carattere per il suo valore letterale, è necessario comunicarlo alla shell facendolo precedere da un carattere di escape <code>\</code> oppure racchiudendolo tra apici o virgolette.
Alcuni caratteri hanno un valore speciale per la [[shell]], per consentire le espansioni o determinati costrutti. Di conseguenza se si intende scrivere il carattere per il suo valore letterale, è necessario comunicarlo alla shell facendolo precedere da un carattere di escape <code>\</code> oppure racchiudendolo tra apici o virgolette.


Una stringa non racchiusa tra apici o tra virgolette ha i seguenti caratteri speciali: <code>$ ' ` " \ { } [ ] * ? ~ & ; ( ) < > | #</code>
Una stringa non racchiusa tra apici o tra virgolette ha i seguenti caratteri speciali: <code>$ ' ` " \ { } [ ] * ? ~ & ; ( ) < > | #</code>
Riga 34: Riga 34:
</pre>
</pre>


==Racchiudere tra apici==
== Racchiudere tra apici ==
Con gli apici (apostrofi) si riducono i caratteri speciali a uno soltanto, lo stesso apice, rappresentando la stringa per il suo solo valore letterale e impedendo tutte le espansioni:
Con gli apici (apostrofi) si riducono i caratteri speciali a uno soltanto, lo stesso apice, rappresentando la stringa per il suo solo valore letterale e impedendo tutte le espansioni:
<pre>printf %s\\n '$PATH "" \ `ls ..` \$HOME ~ * .[a-z]*'  # stampa la stringa tra apici, letteralmente</pre>
<pre>printf %s\\n '$PATH "" \ `ls ..` \$HOME ~ * .[a-z]*'  # stampa la stringa tra apici, letteralmente</pre>
Riga 41: Riga 41:
<pre>printf %s\\n 'L'\''albero di... ' # stampa "L'albero di..." (un apice non può essere racchiuso tra apici)</pre>
<pre>printf %s\\n 'L'\''albero di... ' # stampa "L'albero di..." (un apice non può essere racchiuso tra apici)</pre>


==Racchiudere tra $'...'==
== Racchiudere tra $'...' ==
Una stringa racchiusa tra <code>$'...'</code> non può essere espansa in nessun modo, come se fosse racchiusa tra apici. Il carattere <code>\</code> resta un carattere di escape, quindi è possibile inserire un apice nella stringa facendolo precedere da <code>\</code> e dev'essere preceduto dal carattere di escape anche ogni <code>\</code> da stampare letteralmente.
Con '''bash''' (non ''POSIX'') una stringa racchiusa tra <code>$'...'</code> non può essere espansa in nessun modo, come se fosse racchiusa tra apici. Il carattere <code>\</code> resta un carattere di escape, quindi è possibile inserire un apice nella stringa facendolo precedere da <code>\</code> e dev'essere preceduto dal carattere di escape anche ogni <code>\</code> da stampare letteralmente.


Un carattere <code>\</code> non preceduto da escape permette di stampare caratteri di escape, con la stessa sintassi del formato di <code>printf</code> (quando racchiuso tra apici):
Un carattere <code>\</code> non preceduto da escape permette di stampare caratteri di escape, con la stessa sintassi del formato di <code>printf</code> (quando racchiuso tra apici):
Riga 63: Riga 63:
</pre>
</pre>


È un metodo molto meno diffuso rispetto a racchiudere tra apici e virgolette, perché non derivata da '''sh''' (''POSIX'').
È un metodo molto meno diffuso rispetto a racchiudere tra apici e virgolette, perché non derivato da '''sh''' (''POSIX''). È in genere sconsigliabile utilizzarlo, se non per assegnare caratteri di escape (a capo o tabulazioni) a una variabile.


==Quotare (tra virgolette)==
== Quotare (tra virgolette) ==
Racchiudere tra virgolette ogni stringa è raccomandabile, anche se non sempre necessario, così da ridurre il numero di caratteri speciali a cui pensare, permettendo allo stesso tempo l'espansione sicura delle variabili e dei comandi. I soli caratteri speciali rimasti sono <code>$</code>, <code>`</code> (ma non l'apice), <code>"</code> e <code>\</code>, che devono essere preceduti dal carattere di escape <code>\</code>.
Racchiudere tra virgolette ogni stringa è raccomandabile, anche se non sempre necessario, così da ridurre il numero di caratteri speciali a cui pensare, permettendo allo stesso tempo l'espansione sicura delle variabili e dei comandi. I soli caratteri speciali rimasti sono <code>$</code>, <code>`</code> (ma non l'apice), <code>"</code> e <code>\</code>, che devono essere preceduti dal carattere di escape <code>\</code>.


6 999

contributi