findコマンドの出力を配列に保存しようとしています。
私はさまざまなことを試しましたが、何も機能していないようでした。それらのいくつかは、以下のコメント行にあります。問題は、「$ {findNameCmdSubDir [@]}」がトークン化され、検索から除外することを目的としたディレクトリが無視され、すべてのディレクトリが一覧表示されることにあると思います。
配列に渡さずにfindコマンド、つまりプレーンな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!