6 999
contributi
S3v (discussione | contributi) (- template "Versioni compatibili") |
S3v (discussione | contributi) mNessun oggetto della modifica |
||
(6 versioni intermedie di 2 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{ | {{Bash scripting}} | ||
__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 | 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> | ||
Lo svantaggio è che non esiste un carattere di escape: | Lo svantaggio è che non esiste un carattere di escape: | ||
<pre>printf %s\\n 'L'\''albero di... ' # stampa "L'albero di..." ( | <pre>printf %s\\n 'L'\''albero di... ' # stampa "L'albero di..." (un apice non può essere racchiuso tra apici)</pre> | ||
==Racchiudere tra $'...'== | == Racchiudere tra $'...' == | ||
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 | È 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>. | ||
Riga 77: | Riga 77: | ||
printf %s\\n "$(ls ..)" # Esegue il comando "ls .." e ne stampa l'output | printf %s\\n "$(ls ..)" # Esegue il comando "ls .." e ne stampa l'output | ||
printf %s\\n "$((2*2))" # Esegue l'espressione aritmetica e stampa 4 | printf %s\\n "$((2*2))" # Esegue l'espressione aritmetica e stampa 4 | ||
printf %s\\n "~ * .[a-z]*" # non effettua le espansioni di | printf %s\\n "~ * .[a-z]*" # non effettua le espansioni di tilde e percorso, ma stampa letteralmente | ||
printf %s\\n "p{a,b,c}s" # niente espansioni | printf %s\\n "p{a,b,c}s" # niente espansioni | ||
</pre> | </pre> | ||
[[Categoria:Bash]][[Categoria:Bash_Scripting]] | [[Categoria:Bash]][[Categoria:Bash_Scripting]] |
contributi