bashの*は、英数字順にファイルと一致しますか?


25

一連のファイルをファイル名の順序で連結します。

これによって英数字順に表示されると想定しても安全ですか?

cat * 

すなわち、ls与える同じ順序。

回答:


26

簡単な答え:はい。

以下からのbashのmanページ:

単語の分割後、-fオプションが設定されていない限り(The Set Builtinを参照)、Bashは各単語の文字「*」、「?」、および「[」をスキャンします。これらの文字のいずれかが表示される場合、単語はパターンと見なされ、パターンに一致するファイル名のアルファベット順にソートされたリストに置き換えられます。


6
「アルファベット」はロケール設定(特に$LC_COLLATE)によって異なることに注意してください。
-grawity

4
@grawityはtrueですが、ls同じシステムの場合と同じ出力になります。
BloodPhilia

8

簡単な答えは「はい」ですが、英数字の順序は自分が考えている自然な順序に対応していない可能性があるため、英数字の順序がどうあるべきかを認識する必要があります。

たとえば、大文字と小文字の処理方法に関するテストを実行して、システムと数字のシーケンスを調べます。

globによって返されるファイルのリストの順序付けで私が遭遇した共通の問題は、番号付きファイルです。私はしばしば次のような番号のファイルを与えられます:

blah_1.txt
blah_2.txt
...
blah_10.txt
blah_11.txt

ただし、を使用するglobは*これらをこの順序で返しませんが、代わりに次のような結果になります。

blah_1.txt
blah_10.txt
blah_11.txt
...
blah_2.txt
blah_20.txt
...

だから、 -一桁(すなわちゼロをリードしていることをあなたはとてもファイルの返されたリストには、いくつかの操作を行う必要があり、または名前の変更、ファイルのいずれかよ、この問題を回避するためにblah_01.txtblah_02.txtなど)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.