"ls *bash*"が.bashrcファイルを表示しない理由

"ls *bash*"が.bashrcファイルを表示しない理由

マイホームディレクトリにCDを移動し、次のように入力します。

ls *bash*

「bash」を含むファイルのリストが表示されると予想されます。しかしそうではありません。

その間にタイピングをして

ls .bash*

働く

文書によると、は*すべての文字を表します。そうですか?しかし、.この場合はそうではありません。何が問題なの?

答え1

シェルdotglobオプションは以下を制御します。

$ shopt -s dotglob
$ ls *bash*
.bash_history  .bash_logout  .bashrc

ほとんどのエンドユーザーはドットファイルを気にする必要はなく、重要なホームディレクトリファイル(たとえば.config)を誤って削除しやすくなるため、デフォルトではユーザビリティ/セキュリティ対策としては有効になっていません.ssh

答え2

ほとんどのシェルは、「.」で始まる「*」文字と一致しません。歴史的な理由から、文字(「.」で始まるファイルは非表示と見なされ、「.」と「..」はディレクトリを表します)

したがって、ls.bashrcは表示されませんが、ls -aすべてのファイルが表示されます。同様にls *、「.」で始まるファイルを除くすべてのファイルが拡張されます。特徴。

shopt -s dotglob「*」も先行」。文字と一致する必要があることをbashに通知するには、この動作を変更してください。その後、ls *.bashrcも表示されます。

答え3

*その理由は、先行点が「ファイルを隠す」の規則であり、ファイルワイルドカード(「任意の文字」および?「任意の文字」および他のいくつかの文字の名前)が明示的に先行点を除外するためです。 「文書を隠す」を意味するからです。

作成するとls -l .*一致しますが、特殊な隠しファイルとディレクトリも.bashrc一致するため、隠しファイルを表示するには次のものが必要です。...

  • ls -ld .*
  • ls -l .[^.]*
  • ls -A | grep bash

ls -A *bash*このオプションが適用される前に.bashrcファイルの一致が完了したため、表示されません。-A

ファイルワイルドカードが隠しファイルを処理する方法を変更するには、shopt -s dotglobシェルでテストするか、.bash_profileまたは.bashrcに入れて常に機能するようにします。

関連情報