バッシュで、私は試しました
ls [a-z]*
そして、ファイル名が小文字のアルファベットで始まるすべてのファイルをリストすることが期待されます。しかし、名前が大文字のアルファベットで始まるファイルも表示されるのはなぜですか?
>ls [a-z]*
D e
>
必要に応じて、bashバージョン:
bash --version GNU bash、バージョン4.1.5(1)-release(i486-pc-linux-gnu)Copyright(C)2009 Free Software Foundation、Inc.ライセンスGPLv3 +:GNU GPLバージョン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.
* bashの正規表現ではありません*。[az]は少し正規表現のように見え、bashはそれを受け入れているようです。たとえば、ls a +はaaaとは一致しないため、正規表現をサポートしている場合はほとんど一致しません。私はどの程度までは分からない。echo a {3}、echo a \ {3 \}は単にa {3}をエコーし、正規表現のように解釈しません。
—
-barlop
ここでは、bashのパターンマッチングについての記事ですfaqs.org/docs/bashman/bashref_35.html extglobシェルオプションはshopt組み込みコマンドを使用して有効になっている場合、それは」言及は、オペレーターに一致するいくつかの拡張パターンが認識されている。以下の説明では、パターン- 。リストは`で区切られた1つのまたは複数のパターンのリストです|複合パターンは、以下のサブパターンの一つ以上を用いて形成することができる」:」しかし、私はあなたがそのオプションを有効にしたいかどうかはわかりません
—
barlop
cygwinでは、[az] *は[[:lower:]] *とまったく同じように見えますが、大文字は表示されません。GNU bash、バージョン3.2.51(24)-release(i686-pc-cygwin)
—
barlop
@barlop:文字範囲の動作は、ロケール、特に
—
デニスウィリアムソン
LC_COLLATE
(多くの?)ロケールの設定に依存します。[a-z]
「aAbB ... yYz」は含まれますが、「Z」は含まれません。を使用して拡張グロビングを有効にできshopt -s extglob
ます。Cygwinの場合[a-z]
と[[:lower:]]
Cygwinの場合で異なる結果が得られます。