Centos と Debian でこれを試しました。
ls コマンドの * は再帰検索を意味しますか?
ディレクトリ名を入力し始めて Tab キーを押すと、次のように表示されます。
# ls /etc/rc<tab>
rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rc.local rcS.d/
パスにアスタリスクを入れれば同じ結果になると思いましたが、代わりに再帰検索が行われました。
# ls /etc/rc*
/etc/rc.local
/etc/rc0.d:
K50netconsole K90network
/etc/rc1.d:
K50netconsole K90network
/etc/rc2.d:
K50netconsole S10network
/etc/rc3.d:
K50netconsole S10network
...
Windows の dir コマンドは、/etc/rc* に一致するディレクトリのみを表示します。どうすれば ls からこの動作を実現できますか (Tab キーを使用せずに)?
****編集/更新:
OK、これで、* はコマンドではなく bash によって解釈されることがわかりましたが、常に「ファイルとフォルダのエントリを列挙する」と解釈されるのでしょうか、それとも別のコンテキストで使用すると別の処理が行われるのでしょうか。もしそうなら、bash には「* をファイルシステムパスで使用するとファイル名とフォルダ名が返され、* を rpm で使用すると (rpm -qa 投稿*) パッケージ名などを返します。
答え1
アスタリスクはコマンドに到達する前に展開するのでls
、これは
ls /etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d ...
各ディレクトリの内容を個別にリストします。
ls -d /etc/rc*
ディレクトリ内のファイルのリスト表示を抑制するには を使用するか、 などの展開のみを表示するコマンドを使用するとよいでしょうecho /etc/rc*
。
答え2
デフォルトでは、ls
ディレクトリ引数を指定して呼び出すと、ディレクトリの内容が表示されます。オプションでこの動作を変更できます-d
。man ls
-d, --directory
list directory entries instead of contents, and do not derefer‐
ence symbolic links