マイホームディレクトリに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に入れて常に機能するようにします。