Vím, jak *
je interpretován v příkazech jako ls
například. Ale při pokusu o spuštění *
jako příkaz se shell pokusí spustit první soubor nebo adresář ve vašem pracovním adresáři. Proč je to? Jak shell rozumí *
?
Přijatá odpověď:
Na rozdíl od některých jiných operačních systémů, v Unixech je to shell, který rozšiřuje zástupné znaky názvu souboru. Nejprve rozbalí rozšíření parametrů a globy a poté použije (nyní) první slovo jako název pro spuštění příkazu.
To je také důvod, proč soubory pojmenované s úvodní pomlčkou mohou být problematické:globus jako *
se rozbalí na názvy souborů a název začínající pomlčkou může být použit jako možnost. (Děsivý příklad je, že soubor s názvem -r
v pracovním adresáři by bylo rm *
odstranit vše rekurzivně…)
Obvykle se nepoužije *
jako první položku na libovolném příkazovém řádku, takže pokud první soubor určí, který příkaz se má v takovém případě spustit, pravděpodobně nezpůsobí problémy.