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