Bash scripting - espansioni non quotabili: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
aggiunte classi predefinite per l'espansione di percorso (globbing)
m (correzione classe con file nascosti)
(aggiunte classi predefinite per l'espansione di percorso (globbing))
Riga 65: Riga 65:
**il carattere <code>!</code> può essere contenuto per il suo valore letterale in una classe purché non in prima posizione, mentre il carattere <code>-</code> è considerato letteralmente soltanto in prima posizione (o seconda se dopo <code>!</code>) e in ultima posizione.
**il carattere <code>!</code> può essere contenuto per il suo valore letterale in una classe purché non in prima posizione, mentre il carattere <code>-</code> è considerato letteralmente soltanto in prima posizione (o seconda se dopo <code>!</code>) e in ultima posizione.


Esistono inoltre delle classi già predefinite, utilizzabili all'interno di '''[ ]''' con altre parentesi quadre e la seguente sintassi:
* '''[:lower:]''', per caratteri alfabetici minuscoli (a-z);
* '''[:upper:]''', per caratteri alfabetici maiuscoli (A-Z);
* '''[:alpha:]''', per caratteri alfabetici minuscoli e maiuscoli (a-zA-Z);
* '''[:digit:]''', per caratteri numerici (0-9);
* '''[:xdigit:]''', per caratteri numerici in base esadecimale (0-9A-F);
* '''[:alnum:]''', per caratteri alfabetici e numerici (a-zA-Z0-9);
* '''[:word:]''', per caratteri alfabetici, numerici e underscore (a-zA-Z0-9_);
* '''[:punct:]''', per caratteri di punteggiatura, accenti, virgolette, parentesi, underscore, operatori e tutti i simboli presenti tra i primi 127 caratteri ASCII;
* '''[:graph:]''', per caratteri che hanno una rappresentazione grafica visibile (niente spazi), ossia tutto ciò che appartiene alle classi '''[:word:]''' e '''[:punct:]'''. Corrisponde a tutti i caratteri ASCII compresi tra 21 e 126;
* '''[:print:]''', corrisponde alla classe '''[:graph:]''' con l'aggiunta del carattere spazio (non tabulazioni o "a capo"), ossia ai caratteri ASCII compresi tra 20 e 126;
* '''[:blank:]''', per caratteri di spaziatura orizzontale che lasciano spazi vuoti, ossia spazio e tabulazione (orizzontale);
* '''[:space:]''', per tutti i caratteri di spaziatura, ossia spazio, tabulazione orizzontale e verticale, interruzioni (''break''), ritorno a inizio riga (''carriage return'') e "a capo";
* '''[:cntrl:]''', per tutti i caratteri di controllo, ossia i primi 128 caratteri ASCII che non appartengono alla classe '''[:print:]'''. Non include lo spazio, ma include tutti gli altri caratteri presenti in '''[:space:]'''; e in generale i caratteri ASCII da 0 a 19, e il carattere ASCII n. 127;
* '''[:ascii:]''', per tutti i caratteri ASCII da 0 a 127, ed è equivalente alle due classi '''[:print:]''' e '''[:cntrl:]'''.
===Esempi di espansioni di percorso===
Se un nome di file non include il percorso assoluto (iniziante con la directory radice '''/''') o relativo (iniziante con '''./''' oppure '''../''', dalla directory corrente e da quella superiore rispettivamente), di default si assume che sia nella directory corrente. Tuttavia per evitare ambiguità con i nomi delle opzioni di alcuni comandi, in presenza di possibili nomi di file inizianti con il trattino '''-''', in particolare se la parte iniziale del file è generata dall'espansione di percorso, è sempre bene rendere esplicito il percorso relativo premettendo '''./''' al nome del file.
Se un nome di file non include il percorso assoluto (iniziante con la directory radice '''/''') o relativo (iniziante con '''./''' oppure '''../''', dalla directory corrente e da quella superiore rispettivamente), di default si assume che sia nella directory corrente. Tuttavia per evitare ambiguità con i nomi delle opzioni di alcuni comandi, in presenza di possibili nomi di file inizianti con il trattino '''-''', in particolare se la parte iniziale del file è generata dall'espansione di percorso, è sempre bene rendere esplicito il percorso relativo premettendo '''./''' al nome del file.


Riga 72: Riga 89:
* <code>./*</code> si espande a tutti i file non nascosti nella directory corrente;
* <code>./*</code> si espande a tutti i file non nascosti nella directory corrente;
* <code>./*.txt</code> espande a tutti i file con estensione .txt ('''NOTA:''' anche directory e qualsiasi file non regolare avente tale estensione);
* <code>./*.txt</code> espande a tutti i file con estensione .txt ('''NOTA:''' anche directory e qualsiasi file non regolare avente tale estensione);
* <code>./*."${estensione}"</code> espande dopo aver espanso la variabile (contrariamente a ~), che può anche essere quotata;
* <code>./*.[tT][xX][tT]</code> espande a tutti i file con estensione txt (ignorando maiuscole e minuscole);
* <code>"./${nome}"*</code> espande a tutti i file inizianti con ${nome};
* <code>./*."${estensione}"</code> espande a tutti i file con l'estensione indicata dalla variabile quotata;
* <code>"./${nome}"*</code> espande a tutti i file inizianti con il prefisso indicato dalla variabile quotata;
* <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>./[</code><code>[:alpha:]]*</code> equivalente a sopra;
* <code>./[</code><code>[:word:]]*</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>./[a-zA-Z]*</code> espande a tutti i file inizianti con una lettera qualsiasi;
* <code>./*.[tT][xX][tT]</code> espande a tutti i file con estensione txt (ignorando maiuscole e minuscole);
* <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 '''..''');
* <code>./..?*</code> espande a tutti i file nascosti di almeno tre caratteri in cui il secondo è un punto (tutti i file nascosti saltati dal precedente, ma sempre escludendo '''.''' e '''..''');
* <code>./..?*</code> espande a tutti i file nascosti di almeno tre caratteri in cui il secondo è un punto (tutti i file nascosti saltati dal precedente, ma sempre escludendo '''.''' e '''..''');
3 581

contributi

Menu di navigazione