web-dev-qa-db-ja.com

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

たくさんのファイルをファイル名順に連結したい。

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

cat * 

つまり、lsが与えるのと同じ順序です。

26
therefromhere

簡単な答え:はい、そうなります。

bash man ページから:

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

26
BloodPhilia

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

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

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
...

したがって、この問題を回避するには、返されたファイルのリストを操作するか、1桁の数字が先頭にゼロになるようにファイルの名前を変更する必要があります(つまり、blah_01.txtblah_02.txtなど)。

9
dtlussier