find
발견된 모든 파일을 반복 하고 각 파일을 배열에 추가하고 싶습니다 . 이것이 내가 지금까지 가지고 있는 것입니다:
myarray=()
find . -name '*.php' -exec myarray\+=\({}\) \;
echo "${myarray[@]}"
대신 다음과 같은 것을 많이 생성합니다.
find: myarray+=(./somedir/somefile.php): No such file or directory
적절한 이스케이프를 사용하여 이 작업을 수행할 수 있는 방법이 있습니까?
답변1
접근 방식은 다음과 같아야 합니다. 사고방식을 균형 있게 유지하려면 다음과 같이 하십시오.
myarray=()
while IFS= read -rd '' files; do myarray+=("$files")
done < <(find . -type f -name '*.php' -print0)
printf '%s\n' "${myarray[@]}"
참고로. myarray=()
배열 변수를 전혀 정의할 필요가 없습니다 . 무시해도 됩니다.