*
たとえば、コマンドで説明する方法を知っていますls
。ただし、コマンドで実行しようとすると、*
シェルは作業ディレクトリの最初のファイルまたはディレクトリを実行しようとします。なぜこれですか?シェルはそれをどのように理解していますか*
?
答え1
他のオペレーティングシステムとは異なり、Unixではファイル名のワイルドカードがシェルによって拡張されます。まず、パラメータ拡張とワイルドカードを拡張してから、(現在)最初の単語を実行するコマンド名として使用します。
これがダッシュで始まるファイルが問題になる可能性がある理由でもあります。このようなワイルドカードは*
ファイル名に拡張され、ダッシュで始まる名前はオプションと見なすことができます。 (ひどい例、-r
作業ディレクトリのファイルを呼び出すと、rm *
すべてが再帰的に削除されます...)
ただし、通常、人々はこれをコマンドラインの最初のエントリとして使用しないため、最初のファイルがこの場合に実行する*
コマンドを決定するようにしても問題は発生しません。