web-dev-qa-db-ja.com

「ls」または正規表現では大文字と小文字は区別されませんか?

Bashで、私は試しました

ls [a-z]*

そして、ファイル名が小文字のアルファベットで始まるすべてのファイルをリストすることが期待されています。しかし、名前が大文字のアルファベットで始まるファイルも表示されるのはなぜですか?

>ls [a-z]*
D  e
>

必要に応じて、bashバージョン:

bash --version GNU bash、バージョン4.1.5(1)-リリース(i486-pc-linux-gnu)Copyright(C)2009 Free Software Foundation、Inc。License GPLv3 +:GNU GPL version 3以降 http://gnu.org/licenses/gpl.html

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
5
zhanwu

混乱が生じるのは正規表現ではありません。代わりに、「グロブ」と呼ばれるシステムを使用します。以下を参照してください。

$ man 7 glob

[a-z]の代わりに[[:lower:]]を次のように使用する必要があります。

$ ls -d [[:lower:]]*
3
Majenko

1)オペレーティングシステム、より具体的にはファイルシステムによって異なる場合があります。ファイルシステムで大文字と小文字が区別されますか? OSやファイルシステムの種類については言及していません。

2)bashは、大文字と小文字を区別しないグロブも実行できます。 shopt | grep nocaseglobを使用して、これが現在のケースであるかどうかを確認できます。

また、余談ですが、lsはファイルに対して何も実行していないことに注意してください。シェルは、ファイル名をlsに渡します。

1
Rich Homolka