다음과 같은 코드가 있다고 가정해 보겠습니다.
for i in $(find * -type f -name "*.txt"); do
# echo [element by it's index]
done
가능하다면 인덱스로 요소에 어떻게 액세스할 수 있나요?
답변1
주문
$(find * -type f -name "*.txt")
배열이 아닌 (공백으로 구분된) bash 목록을 반환하므로 실제로 "대상" 방식으로 개별 요소에 액세스할 수 없습니다.
bash 배열로 변환하려면 다음을 사용하십시오.
filearray=( $(find * -type f -name "*.txt") )
(공백에 주의하세요!)
그런 다음 다음과 같이 개별 항목에 액세스할 수 있습니다.
for ((i=0; i<n; i++))
do
file="${filarray[$i]}"
<whatever operation on the file>
done
항목 수는 다음을 통해 검색할 수 있습니다.
n="${#filearray[@]}"
하지만 참고하세요이것이오직파일 이름에 특수 문자(특히 공백)가 포함되어 있지 않은 경우에 작동합니다.ls
또는 의 출력을 구문 분석하는 것은 권장되지 않습니다 .find
. 귀하의 경우에는 -exec
이 옵션이 find
귀하가 달성해야 하는 작업을 수행할 수 있는지 확인하는 것이 좋습니다 .