3 581
contributi
mNessun oggetto della modifica |
(dotglob e nullglob per espansioni di percorso) |
||
Riga 234: | Riga 234: | ||
# associo a testo il contenuto del file indicato da $file | # associo a testo il contenuto del file indicato da $file | ||
testo=$(cat $file) # SBAGLIATO! (se la variabile $file contiene spazi o caratteri speciali) | testo=$(cat -- $file) # SBAGLIATO! (se la variabile $file contiene spazi o caratteri speciali) | ||
testo=$(cat "$file") # le virgolette attorno alla variabile sono necessarie | testo=$(cat -- "$file") # le virgolette attorno alla variabile sono necessarie | ||
testo="$(cat "$file")" # equivalente a sopra | testo="$(cat -- "$file")" # equivalente a sopra | ||
</pre> | </pre> | ||
Riga 316: | Riga 316: | ||
Sintassi (prefisso e suffisso possono essere omessi, o essere variabili da espandere): | Sintassi (prefisso e suffisso possono essere omessi, o essere variabili da espandere): | ||
* <code>prefisso'''?'''suffisso</code> sostituisce un singolo carattere di un file, con tutti quelli possibili che combaciano con le due stringhe date; | * <code>prefisso'''?'''suffisso</code> sostituisce un singolo carattere di un file, con tutti quelli possibili che combaciano con le due stringhe date, ma di default tranne il '''.''' iniziale se manca il prefisso; | ||
* <code>prefisso'''*'''suffisso</code> può sostituire tutti i caratteri di un file | * <code>prefisso'''*'''suffisso</code> può sostituire tutti i caratteri di un file, ma di default tranne quelli nascosti se manca il prefisso (ossia quelli inizianti con '''.'''). | ||
Esempi (nella directory corrente): | Esempi (nella directory corrente): | ||
* <code>file.???</code> si espande a tutti i file con nome "file" e con una qualsiasi estensione di tre caratteri; | * <code>file.???</code> si espande a tutti i file con nome "file" e con una qualsiasi estensione di tre caratteri; | ||
* <code>*</code> da solo espande a tutti i file non nascosti nella directory corrente. È sempre buona norma far precedere l'asterisco da un ./, che indica la cartella corrente, se non c'è un | * <code>*</code> da solo espande a tutti i file non nascosti nella directory corrente. È sempre buona norma far precedere l'asterisco da un ./, che indica la cartella corrente, se non c'è un percorso assoluto o con tilda, per impedire espansioni di file inizianti con "-", che potrebbero essere visti come opzioni da alcuni comandi; | ||
* <code>./*</code> equivalente a <code>*</code> ma più sicuro; di seguito si userà per tutte le espansioni | * <code>./*</code> equivalente a <code>*</code> ma più sicuro; di seguito si userà per tutte le espansioni (riguardanti la directory corrente); | ||
* <code>./*.txt</code> espande a tutti i file con estensione .txt; | * <code>./*.txt</code> espande a tutti i file con estensione .txt; | ||
* <code>./*."${estensione}"</code> espande dopo aver espanso la variabile (contrariamente a ~), che può anche essere quotata; | * <code>./*."${estensione}"</code> espande dopo aver espanso la variabile (contrariamente a ~), che può anche essere quotata; | ||
* <code>"./${nome}"*</code>espande a tutti i file inizianti con $nome; | |||
* <code>./*/</code> espande a tutte le directory non nascoste; | * <code>./*/</code> espande a tutte le directory non nascoste; | ||
* <code>./.*</code> espande a tutti i file nascosti (comprese "'''.'''" e "'''..'''", ossia directory corrente e superiore). | * <code>./.*</code> espande a tutti i file nascosti (comprese "'''.'''" e "'''..'''", ossia directory corrente e superiore). | ||
Riga 332: | Riga 332: | ||
L'esistenza di file ottenuti da tali espansioni va pertanto sempre controllata, per esempio con il costrutto <code>[ -e "$file" ]</code>: | L'esistenza di file ottenuti da tali espansioni va pertanto sempre controllata, per esempio con il costrutto <code>[ -e "$file" ]</code>: | ||
<pre>for file in ./*; do | <pre>for file in ./*; do | ||
if [ -e "$file" ]; then | if [ -e "$file" ]; then | ||
Riga 338: | Riga 337: | ||
fi | fi | ||
done</pre> | done</pre> | ||
In alternativa, il comportamento di default dell'espansione può essere cambiato (in Bash), tramite <code>shopt</code>: | |||
* '''dotglob''' espande ai file nascosti; | |||
* '''nullglob''' espande a "niente" se non trova nessun file con un dato pattern, rendendo superfluo il controllo sull'esistenza. | |||
Per esempio: | |||
<pre> | |||
shopt -s dotglob nullglob | |||
for file in ./*; do | |||
... | |||
done | |||
</pre> | |||
===Esempio: cambiare l'estensione ai file === | ===Esempio: cambiare l'estensione ai file === | ||
Riga 522: | Riga 532: | ||
|Verificata_da= | |Verificata_da= | ||
:[[Utente:S3v|S3v]] (in Bash tips) | :[[Utente:S3v|S3v]] (in Bash tips) | ||
:[[Utente:HAL 9000|HAL 9000]] | :[[Utente:HAL 9000|HAL 9000]] 19:58, 9 lug 2014 (CEST) | ||
|Estesa_da= | |Estesa_da= | ||
:[[Utente:S3v|S3v]] (in Bash tips) | :[[Utente:S3v|S3v]] (in Bash tips) |
contributi