3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
如果您使用bash4或更高版本,您可以取代你使用的find有
shopt -s globstar nullglob
array=( **/*"$input"* )
通過**啟用的模式globstar匹配0個(gè)或更多目錄,從而允許該模式匹配當(dāng)前目錄中的任意深度。如果沒有該nullglob選項(xiàng),則模式(在參數(shù)擴(kuò)展之后)將按字面意義處理,因此,如果沒有匹配項(xiàng),則您將擁有一個(gè)包含單個(gè)字符串而不是一個(gè)空數(shù)組的數(shù)組。
dotglob如果您想遍歷隱藏的目錄(如.ssh)并匹配隱藏的文件(如.bashrc),也將選項(xiàng)添加到第一行。

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
Bash 4.4 -d為readarray/ 引入了一個(gè)選項(xiàng)mapfile,因此現(xiàn)在可以通過以下方式解決
readarray -d '' array < <(find . -name "$input" -print0)
一種適用于任意文件名(包括空格,換行符和通配符)的方法。
從手冊(cè)中(省略其他選項(xiàng)):
mapfile [-d delim] [array]
-d
的第一個(gè)字符delim用于終止每個(gè)輸入行,而不是換行符。如果delim為空字符串,mapfile則在讀取NUL字符時(shí)將終止一行。
并且readarray只是的同義詞mapfile。
添加回答
舉報(bào)