Bash scripting - espansioni non quotabili: differenze tra le versioni

m
mNessun oggetto della modifica
 
(3 versioni intermedie di 2 utenti non mostrate)
Riga 8: Riga 8:


== Espansione di tilde ==
== Espansione di tilde ==
<!--
Nota: *NON* modificare il nome della sezione, perché è usato in un'altra guida
-->
Sintassi:
Sintassi:
* <code>~</code> (per digitarlo con tastiera con layout italiano: <code>Ctrl-ì</code>) si espande alla home, se non è quotata (equivalente all'uso di ${HOME}, che può essere quotata);
* <code>~</code> (per digitarlo con tastiera con layout italiano: <code>Alt-Gr+ì</code>) si espande alla home, se non è quotata (equivalente all'uso di ${HOME}, che può essere quotata);
* <code>~utente</code> si espande alla home di un dato utente, se esiste, ma la stringa non può essere quotata né essere una variabile.
* <code>~utente</code> si espande alla home di un dato utente, se esiste, ma la stringa non può essere quotata né essere una variabile.


Riga 94: Riga 97:
* <code>./*/</code> espande a tutte le directory non nascoste;
* <code>./*/</code> espande a tutte le directory non nascoste;
* <code>./[a-zA-Z]*</code> espande a tutti i file inizianti con una lettera qualsiasi;
* <code>./[a-zA-Z]*</code> espande a tutti i file inizianti con una lettera qualsiasi;
* <code>./[[:alpha:]]*</code> equivalente a sopra;
* <code>./<nowiki>[[:alpha:]]</nowiki>*</code> equivalente a sopra;
* <code>./[[:word:]]*</code> espande a tutti i file inizianti con lettere maiuscole, minuscole, numeri e underscore;
* <code>./<nowiki>[[:word:]]</nowiki>*</code> espande a tutti i file inizianti con lettere maiuscole, minuscole, numeri e underscore;
* <code>./.*</code> espande a tutti i file nascosti ('''ATTENZIONE:''' comprese "'''.'''" e "'''..'''", ossia directory corrente e superiore);
* <code>./.*</code> espande a tutti i file nascosti ('''ATTENZIONE:''' comprese "'''.'''" e "'''..'''", ossia directory corrente e superiore);
* <code>./.[!.]*</code> espande a tutti i file nascosti di almeno due caratteri in cui il secondo non è un punto (non espande a '''.''' e '''..''', ma nemmeno a possibili file nascosti inizianti con '''..''');
* <code>./.[!.]*</code> espande a tutti i file nascosti di almeno due caratteri in cui il secondo non è un punto (non espande a '''.''' e '''..''', ma nemmeno a possibili file nascosti inizianti con '''..''');
Riga 109: Riga 112:
   fi
   fi
done</pre>
done</pre>
Il pattern <code>*</code> è l'unico in grado di sostituire un numero qualsiasi di caratteri (zero o più), mentre <code>?</code> e le classi sempre e soltanto un singolo carattere. Si faccia attenzione però che tutti i pattern, e non solo quelli composti da <code>*</code>, possono generare liste di percorsi, in presenza di fili multipli con lo stesso prefisso e/o suffisso. Per esempio il pattern '''./a?c''' può espandersi alla lista ''./abc ./aBC ./acc'', se esistono questi tre file nella directory corrente (e nessun altro di tre caratteri che inizi con '''a''' e termini con '''c''').  
Il pattern <code>*</code> è l'unico in grado di sostituire un numero qualsiasi di caratteri (zero o più), mentre <code>?</code> e le classi sempre e soltanto un singolo carattere. Si faccia attenzione però che tutti i pattern, e non solo quelli composti da <code>*</code>, possono generare liste di percorsi, in presenza di fili multipli con lo stesso prefisso e/o suffisso. Per esempio il pattern '''./a?c''' può espandersi alla lista ''./abc ./aBC ./acc'', se esistono questi tre file nella directory corrente (e nessun altro di tre caratteri che inizi con '''a''' e termini con '''c''').


=== Espansione di percorso con nuovi file ===
=== Espansione di percorso con nuovi file ===
Riga 222: Riga 225:
=== Differenze con l'espansione di percorso ===
=== Differenze con l'espansione di percorso ===
L'espansione di parentesi graffe:
L'espansione di parentesi graffe:
* non è ''POSIX'', mentre l'espansione di percorso sì;
* non è [[POSIX]], mentre l'espansione di percorso sì;
* espande delle stringhe, non ha importanza a cosa si riferiscono, mentre l'espansione di percorso si espande solo a percorsi esistenti (al tempo dell'espansione, ossia prima dell'esecuzione del comando);
* espande delle stringhe, non ha importanza a cosa si riferiscono, mentre l'espansione di percorso si espande solo a percorsi esistenti (al tempo dell'espansione, ossia prima dell'esecuzione del comando);
* avviene per prima e può contenere altre espansioni (anche quotate, purché non siano quotate le graffe e le virgole), mentre l'espansione di percorso avviene per ultima e può solo essere il risultato di altre espansioni (se non quotate);
* avviene per prima e può contenere altre espansioni (anche quotate, purché non siano quotate le graffe e le virgole), mentre l'espansione di percorso avviene per ultima e può solo essere il risultato di altre espansioni (se non quotate);
3 581

contributi