에 의해 정의 , 텍스트 파일은 라인의 순서로 구성되어 있습니다. 라인은 개행 문자로 끝납니다. 따라서 텍스트 파일은 비어 있지 않으면 개행 문자로 끝납니다.
read
내장은 텍스트 파일을 읽을 수하기위한 것입니다. 텍스트 파일을 전달하지 않으므로 원활하게 작동하기를 기대할 수 없습니다. 쉘은 모든 행을 읽습니다. 건너 뛰는 것은 마지막 행 다음에 나오는 추가 문자입니다.
마지막 행이 누락되었을 수있는 형식이 잘못된 입력 파일이 있으면 개행을 추가 할 수 있습니다.
{ cat "/tmp/urlFile"; echo; } | …
텍스트 파일이어야하지만 마지막 줄 바꿈이없는 파일은 종종 Windows 편집기에서 생성됩니다. 이것은 일반적으로 Unix의 LF가 아닌 CR LF 인 Windows 줄 끝과 함께 사용됩니다. CR 문자는 어디에서나 거의 유용하지 않으며 어떤 경우에도 URL에 표시 될 수 없으므로 제거해야합니다.
{ <"/tmp/urlFile" tr -d '\r'; echo; } | …
입력 파일의 형식이 양호하고 개행으로 끝나는 echo
경우 빈 줄이 추가됩니다. URL은 비워 둘 수 없으므로 빈 줄은 무시하십시오.
또한 read
직선으로 행을 읽지 않습니다. URL의 경우 앞뒤 공백을 무시합니다. 행 끝의 백 슬래시를 이스케이프 문자로 취급하여 다음 행을 첫 번째 빼기 백 슬래시-줄 바꾸기 시퀀스와 결합시킵니다. 이는 바람직하지 않습니다. 따라서 -r
옵션을에 전달해야 합니다 read
. read
오히려 옳은 것이 되기는 매우 드 rare니다 read -r
.
{ <"/tmp/urlFile" tr -d '\r'; echo; } | while read -r url
do
if [ -z "$url" ]; then continue; fi
…
done