我試圖將find命令的輸出存儲到數組中。Bash腳本:將帶有引號變量的find命令輸出到數組
我嘗試了不同的事情,似乎沒有任何工作,其中幾個在下面的評論線。我猜這個問題是「$ {findNameCmdSubDir [@]}」正在被標記化,並且打算從搜索中排除的目錄被忽略,並且所有目錄都被列出。
如果我給find命令而不將它傳遞給數組,即plain find命令,我會看到列出所有其他目錄(不包含排除項)的預期輸出。
#! /bin/bash
android_path=$1
excludeDirFromSearch=(doc build test unit-test script hardware prebuilt device .)
let "dirCount = 0"
findNameCmdSubDir=()
for dir in "${excludeDirFromSearch[@]}"; do
if [ $((dirCount++)) -eq ${#excludeDirFromSearch[@]} ]; then
findNameCmdSubDir+=(-name "${dir}*")
else
findNameCmdSubDir+=(-name "${dir}*" -prune -o)
fi
done
searchSubDirectories=()
searchSubDirectories=($(find "${android_path}" -mindepth 1 -maxdepth 1 \
"${findNameCmdSubDir[@]}" -type d)) <<-- Not Working!
#find "${android_path}" -mindepth 1 -maxdepth 1 "${findNameCmdSubDir[@]}" \
# -type d | while read line; do
# echo "$line"
#done <-- Not working
find "${android_path}" -mindepth 1 -maxdepth 1 "${findNameCmdSubDir[@]}" \
-type d -print <-- works as expected !
echo "${searchSubDirectories[@]}"
更新
我試圖逃避雙引號和仍然沒有運氣
searchSubDirectories=($(find "${android_path}" -mindepth 1 -maxdepth 1 \"${findNameCmdSubDir[@]}\" -type d)) <<-- Not Working!
的缺少'-print'與這個問題無關。請參閱'find(1)':*如果未給出表達式,則使用表達式-print *。 –