Chcę połączyć kilka plików razem w kolejności nazw plików.
Czy można bezpiecznie założyć, że otrzymam je w kolejności alfanumerycznej?
cat *
tj. ta sama kolejność, która ls
daje.
Krótka odpowiedź: Tak.
Ze strony podręcznika użytkownika bash :
Po podziale słów, chyba że ustawiono opcję -f (zobacz Wbudowany zestaw), Bash skanuje każde słowo pod kątem znaków „*”, „?” I „[”. Jeśli pojawi się jeden z tych znaków, to słowo jest traktowane jako wzór i zastępowane alfabetycznie uporządkowaną listą nazw plików pasujących do wzorca.
$LC_COLLATE
).ls
w tym samym systemie.Krótka odpowiedź brzmi tak, ale musisz zdawać sobie sprawę z tego, co według niego powinien być porządek alfanumeryczny, ponieważ może nie odpowiadać porządkowi naturalnemu, o którym myślisz.
Na przykład uruchom test sprawdzający, jak obsługiwane są wielkie i małe litery, aby dowiedzieć się w systemie, a także sekwencje liczb.
Częstym problemem, na jaki natknąłem się podczas porządkowania list plików zwracanych przez glob, są pliki numerowane. Często dostaję pliki o numerach takich jak:
Jednak glob używający
*
nie zwróci ich w tej kolejności, zamiast tego otrzymasz coś takiego:Tak - aby uniknąć tego problemu będziesz albo trzeba zrobić jakąś manipulację na zwróconej listy plików lub plików przemianowania tak że jednocyfrowych mają zero (tj
blah_01.txt
,blah_02.txt
itp).źródło