如何在可執行參數中載入超過 10 個範圍的文件?
我有這個工作命令行表達式:
program --files path_to_mydir/mydata_[0-9].csv
我想離開,
[0-100]
但這不起作用。
program --files path_to_mydir/mydata_[0-100].csv
另外,額外問一下,你怎麼稱呼
[0-10]
wrt shell 腳本和 bash 腳本?謝謝
編輯:雖然類似這個問題不是問
ls
是
[...]
一個括號表達式。它始終匹配單個字元,因此您不能使用[0-100]
它,因為它只會匹配單個0
或1
(在 POSIX 語言環境中)在
zsh
shell 中,您可以使用<0-100>
數值範圍通配模式,但這不適用於bash
:program --files path_to_mydir/mydata_<0-100>.csv
在
bash
中,您可以改用大括號擴展:program --files path_to_mydir/mydata_{0..100}.csv
但是您必須注意這與文件名通配模式之間的區別。一個大括號擴展,就像上面的那個一樣,生成字元串,不管有什麼文件名可用,而文件名通配模式匹配現有的名稱。這意味著大括號擴展可能會為您的程序提供不存在的文件名。
您可以使用
[...]
0 到 100 之間的數字來匹配文件,但您必須將其設為三種模式,每種模式對應一種數字長度:shopt -s nullglob program --files \ path_to_mydir/mydata_[0-9].csv \ path_to_mydir/mydata_[1-9][0-9].csv \ path_to_mydir/mydata_[1][0][0].csv
第一個匹配包含數字
0
到 to9
的名稱,第二個匹配包含10
到 to的名稱99
,最後一個匹配包含 的名稱100
。你想匹配零填充的整數:
shopt -s nullglob program --files \ path_to_mydir/mydata_[0][0-9][0-9].csv \ path_to_mydir/mydata_[1][0][0].csv
我
nullglob
在此程式碼的兩種變體中都設置了 shell 選項,以確保刪除與任何名稱不匹配的任何模式,並且不會未展開。使用者 fra-san 注意到您可以將上面的大括號擴展與強制 shell 觸發 globbing 模式匹配的東西結合使用:
shopt -s nullglob program --files path_to_mydir/[m]ydata_{0..100}.csv
在字元串中包含
[m]
(與字元 匹配的模式m
)將強制 shell 將大括號擴展創建的每個字元串視為單獨的通配模式。由於我們使用nullglob
,與現有名稱不對應的模式將從參數列表中刪除。請注意,這將生成並擴展 101 個通配模式,而在此答案中使用通配的其他方法使用兩個或三個模式。