È avvincente una caratteristica della shell?

12

Ho letto molte domande e risposte come questo e questo

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 find ci darà un errore perché find non può accettare più argomenti e le modalità per risolverlo sono:

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

Usciamo dall'asterisco e impediamo l'espansione dalla shell, ma i caratteri jolly sono una caratteristica della shell; quando usciamo dalla shell dell'asterisco non sappiamo il suo significato, e dovrebbe trovare un file chiamato *.rb , quindi come è l'asterisco che viene espanso in questo caso?

    
posta Sinoosh 22.09.2016 - 10:06
fonte

1 risposta

21

Sì, la shell capisce * come tutti i file con qualsiasi carattere nella directory e *.rb come tutti i file con qualsiasi carattere e finisce .rb , e lo espande come tale.

Il comando find accetta se stesso globbing.

Se non citi il * allora la shell lo espande prima il comando find vede il suo argomento, quindi invece di un glob *.rb passato a find , i nomi di tutti i file che corrispondono al glob nella directory saranno passati a find , e find proverà a interpretarli come argomenti, il che probabilmente causerà un errore, o almeno non quello che vuoi (funzionerà correttamente solo se non ci sono file corrispondenti nella directory corrente)

    
risposta data Zanna 22.09.2016 - 10:18
fonte

Leggi altre domande sui tag