Bash
在 Bash 中,萬用字元擴展是否保證有序?
Bash 中萬用字元的擴展是否保證按字母順序排列?我被迫將一個大文件分成 10 Mb 的片段,以便我的 Mercurial 儲存庫可以接受它們。
所以我想我可以使用:
split -b 10485760 Big.file BigFilePiece.
然後代替:
cat BigFile | bigFileProcessor
我可以:
cat BigFilePiece.* | bigFileProcessor
在它的位置。
但是,我找不到任何地方可以保證星號(又名萬用字元,又名
*
)的擴展總是按字母順序排列,所以它.aa
在之前.ab
(而不是時間戳排序或類似的東西)。另外,我的計劃有什麼缺陷嗎?
cat
一起 ing 文件的性能成本有多大?
是的,globbing 擴展是按字母順序排列的。
從Bash
man
頁面:路徑名擴展
分詞後,除非
-f
已設置該選項,否則 bash 會掃描每個單詞中的字元*
、?
和[
. 如果出現這些字元之一,則該詞被視為一種模式,並替換為按字母順序排列的與該模式匹配的文件名列表。
它記錄了行為,
bash
因此您可以在腳本中依賴它。很長一段時間以來,其他 Bourne 兼容的 shell 也是如此……儘管可能存在關於大小寫折疊或非字母數字字元的極端情況。(結果列表
bash
將按幾乎“ASCII-betical”的順序排列——除了小寫和大寫字母將被整理在一起,就好像沒有大小寫差異一樣,但小寫字母在大寫等效項之前整理。所有非-alphabetics 應該按照它們在 ASCII 中出現的順序排列)。正如其他人指出的那樣,這可能會受到與語言相關的環境設置的干擾:通常是 LANG,更具體地說是 LC_COLLATE。在命令下執行依賴於全域擴展排序的命令可能是最安全的,
env
以清除環境(使用-i
或-u
酌情)或通過管道傳輸結果sort
以確保穩健的排序。