为什么“ls .*”显示隐藏目录的内容?

ago*_*sis 1 ls wildcards

为什么会ls .*打印出隐藏目录的内容?我只想打印隐藏文件,现在看到 Show only Hidden Files是一个解决方案,但我仍然想了解为什么显示目录的内容。未显示更多嵌套目录的内容。

以下是ls .*我的主目录中的部分输出。

.bash_history
.bash_profile
.bashrc
.coin_history
.emacs
.gitconfig
.gitignore_global
.grasp_jss

.ssh:
config          github_rsa.pub  id_rsa.pub      known_hosts.old
github_rsa      id_rsa          known_hosts     lambda.pem

.vim:
colors   ftdetect syntax
Run Code Online (Sandbox Code Playgroud)

这台机器正在运行 RHEL。在 Mac OSX 上观察到类似的行为。

Joh*_*ohn 5

简短回答:shell glob 扩展。

外壳接受您的输入并.*在将其传递给之前扩展该部分ls,因此您正在有效地执行以下操作:

$ ls .bash_history .bash_profile .bashrc .coin_history .emacs ...
Run Code Online (Sandbox Code Playgroud)

所以它列出了每个条目。当它看到一个目录条目时,它会列出该目录的内容,正如您所期望ls的那样。要仅查看工作目录中的文件/目录,请使用以下-d选项ls

$ ls -d .*
Run Code Online (Sandbox Code Playgroud)

-d选项告诉ls“列出目录本身,而不是它们的内容”(取自ls手册页)。