So come *
viene interpretato in comandi come ls
Per esempio. Ma quando si tenta di eseguire *
come comando, la shell tenta di eseguire il primo file o directory nella directory di lavoro. Perchè è questo? Come fa la shell a capire *
?
Risposta accettata:
A differenza di altri sistemi operativi, in Unix è la shell che espande i caratteri jolly del nome file. Espande prima le espansioni dei parametri e i glob, quindi usa la (ora) prima parola come nome per l'esecuzione del comando.
Questo è anche il motivo per cui i file denominati con un trattino iniziale possono essere problematici:un glob come *
si espanderà ai nomi dei file e un nome che inizia con un trattino può essere preso come opzione. (L'esempio spaventoso è che un file chiamato -r
nella directory di lavoro renderebbe rm *
rimuovi tutto in modo ricorsivo...)
Di solito non si usa *
come primo elemento su qualsiasi riga di comando, tuttavia, è probabile che il fatto che il primo file determini il comando da eseguire in quel caso non causi problemi.