csv 파일에 나열된 파일을 특정 디렉터리에 복사하는 쉘 스크립트(OSX)를 작성하고 싶습니다. csv 파일의 각 행에서 따옴표를 제거해야 합니다.
내 시도
for i in $(cat myfile.csv)
temp="${$i%\"}"
temp="${temp#\"}"
do
cp foldername/$temp foldername/subfoldername
done
다음 오류가 발생합니다.
./mfcsv.sh: line 2: syntax error near unexpected token `temp="${$i%\"}"'
./mfcsv.sh: line 2: ` temp="${$i%\"}"'
답변1
2개의 오류가 있습니다:
- 잘못된 루프 구문은
do
두 번째 줄에 있어야 합니다. - 대체 구문이 잘못되었습니다.
i
앞에 달러 기호가 필요하지 않습니다.
이 시도:
#!/bin/bash
for i in $(cat myfile.csv)
do
temp="${i%\"}"
temp="${temp#\"}"
cp foldername/$temp foldername/subfoldername
done
그러나 파일 이름에 공백이 있으면 실패합니다. 아래 스크립트는 공백에도 작동합니다.
#!/bin/bash
while read i;
do
temp="${i%\"}"
temp="${temp#\"}"
cp "foldername/$temp" "foldername/subfoldername"
done < myfile.csv
답변2
매개변수 확장 이전이 아닌 이후에 배치됩니다 do
. 그리고 확장에서는 $ 기호를 생략하고 변수에 할당할 때를 제외하고는 확장 주위에 큰따옴표를 사용합니다. 예를 들어
while read file
do
temp=${file%\"}
temp=${temp#\"}
cp "foldername/$temp" "foldername/subfoldername"
done < myfile.csv