Il globbing è una caratteristica della shell?


12

Ho letto molte domande e risposte come questa e questa

So che i caratteri jolly vengono espansi dalla shell prima di eseguire un comando e sono una caratteristica della shell. Anche i caratteri jolly funzionano con quei comandi che possono accettare molti argomenti. In find . -name *.rb se abbiamo più di un file nella directory corrente findci darà un errore perché ritrovamento non può accettare più argomenti ed i modi per risolvere questo sono:

find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb

Sfuggiamo all'asterisco e impediamo l'espansione della shell ma i caratteri jolly sono una caratteristica della shell; quando sfuggiamo alla shell dell'asterisco non ne conosce il significato e dovrebbe trovare un file chiamato *.rb, quindi come si espande l'asterisco in questo caso?

Risposte:


21

Sì, la shell comprende *tutti i file con caratteri nella directory e *.rbtutti i file con caratteri e finale .rbe li espande in quanto tali.

Il findcomando stesso accetta globbing.

Se non lo citi, la *shell lo espanderà prima che il findcomando veda il suo argomento, quindi invece di un glob *.rbpassato a find, i nomi di tutti i file corrispondenti al glob nella directory verranno passati a find, e findproveranno a interpretarli come argomenti, che probabilmente comporteranno un errore, o almeno non quello che vuoi (funzionerà correttamente solo se non ci sono file corrispondenti nella directory corrente)


grazie, significa che diciamo che shell non è un glob ma alcuni comandi possono espandere i caratteri jolly? o possiamo dire se abbiamo una shell senza capire il globbing quei comandi sanno che il globbing può espanderli?
Sinoosh,

5
se *viene citato, la shell non lo espande e l'argomento incluso il glob viene passato al comando in grado di comprendere il glob - è lo stesso per tutti i comandi che accettano regex che dovrebbero essere sempre citati ...
Zanna

1
Il mio piacere ^ _ ^
Zanna,

7
@Sinoosh: Nota che non tutti i comandi comprendono la sintassi globale. Capita solo di essere una caratteristica difind
slebetman il

1
@Sinoosh Find non sta davvero "espandendo" il carattere jolly, ma lo sta usando come test per abbinare ogni nome di file che incontra. Esistono (molto) pochi comandi che espandono i caratteri jolly in senso convenzionale - unzip e 7z possono usarlo per aprire più archivi (quando i loro argomenti sono normalmente di una forma " [archive filename single argument] [list of files to extract]") per esempio.
Casuale 832
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.