
bash 檔名擴充(通配符)是否有最大限制?看通配在 tldp.org 上。
假設我想對文件子集運行命令:
grep -e bar foo*
rm -f bar*
bash 擴充的檔案數量是否有限制?
我並不是在尋找執行這些操作的替代方法(例如使用find
)。
答案1
glob 可以擴充的檔案數量沒有限制(可用記憶體除外)bash
。
但是,當這些文件作為參數傳遞給命令時,被處決(與 shell 內建函數或函數相反),那麼您可能會execve()
在某些系統上遇到系統呼叫的限制。在大多數系統上,該系統呼叫對傳遞給它的參數和環境的累積大小有限制,並且在 Linux 上對單一參數的大小也有單獨的限制。
有關更多詳細信息,請參閱:
要解決該限制,您可以使用(假設 GNUxargs
或相容):
printf '%s\0' foo* | xargs -r0 rm -f
上面,因為printf
是內建的(在bash
大多數類似 Bourne 的 shell 中),所以我們沒有達到極限execve()
。並將根據需要xargs
將參數列表拆分為盡可能多的rm
呼叫以避免execve()
限制。
和zsh
:
autoload zargs
zargs foo* -- rm -f
和ksh93
:
command -x rm -f foo*