我試圖將結果保存find為數組。這是我的代碼:#!/bin/bashecho "input : "read inputecho "searching file with this pattern '${input}' under present directory"array=`find . -name ${input}`len=${#array[*]}echo "found : ${len}"i=0while [ $i -lt $len ]doecho ${array[$i]}let i++done我在當前目錄下得到2個.txt文件。所以我期望'2'作為的結果${len}。但是,它打印1。原因是將所有結果都find作為一個元素。我怎樣才能解決這個問題?PS我發現了幾個解決方案,在計算器上有關類似問題。但是,它們有些不同,因此我無法申請。我需要在循環之前將結果存儲在變量中。再次感謝。
3 回答

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

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