목록을 반복하고 쉘 스크립트의 find 명령을 통해 반환합니다.

목록을 반복하고 쉘 스크립트의 find 명령을 통해 반환합니다.

.csv디렉토리에서 파일을 찾고 그 이름을 쉘 스크립트의 변수에 할당하려고 합니다 .

다음 코드를 작성했습니다.

x="$(find extracted_data/*.csv)"
echo "$x"
IFS = $'\n'
for i in "${x[@]}"; do
        echo "${i}"
done

그러나 이 코드를 실행하면 다음과 같은 결과가 나타납니다.

extracted_data/another_file.csv 
extracted_data/sample.csv 
sheet.sh: 4: IFS: not found 
sheet.sh: 5: Bad substitution

이 두 가지 오류가 발생하므로 코드에 어떤 문제가 있습니까?

코드를 얻으려면 다음 두 링크를 따라갔습니다. find에서 반환된 파일 이름을 반복합니다.그리고배열용

답변1

먼저 다음 권장사항을 다시 한번 말씀드리겠습니다.find루프 출력 없음.

이제 문제를 해결하려면 스크립트에 매우 간단한 구문 오류가 있습니다. 변수 할당

IFS = $'\n'

기필코 아니다로고 주변에 공백이 있습니다 =. 쉘 변수 할당은 다음 형식이어야 합니다.

IFS=$'\n'

확인하고 싶을 수도 있습니다shellcheck는 이러한 오류를 방지하기 위해 많은 Linux 배포판에서 독립 실행형 도구로도 사용할 수 있습니다.

그 의미는, 간단히 선언함으로써 달성하려는 작업을 더 간단하고 오류가 덜 발생하는 방식으로 수행할 수 있습니다.

for x in extracted_data/*.csv
do
  echo "$x"
done

파일 이름에 개행 문자가 포함되어 있어도 중단되지 않습니다(불행히도 개행 문자는 파일 이름에 유효한 문자입니다).

관련 정보