2017-03-02 1 views
1

입력 파일을 실패 읽을bash는 동안 루프 라인 종료로 와

while read line;do echo $line;done < list; 

문제점 : 위의 스크립트는 아무것도 출력하지 않습니다. read 대신 'read -r'을 사용하면 모든 행이 인쇄됩니다. 내 질문은

..

하지 while 루프를 적어도 한 번 (-r없이) 위의 경우에 실행 및 출력의 첫 번째 줄을 인쇄해야 하는가? 첫 번째 라인 자체에서 조건 체크가 실패하는 이유는 무엇입니까?

+1

출력 코드를 확인 : line 여전히 선이 지금까지 읽어 포함

Exit Status: The return code is zero, unless end-of-file is encountered, read times out (in which case it's greater than 128), a variable assignment error occurs, or an invalid file descriptor is supplied as the argument to -u.

하는 것으로. 'read <<<를 실행하여 \ '로 끝나는 것을 단독으로 실행 한 다음'echo $?'를 수행 할 수 있습니다. 나는 EOF를 때 더 많은 입력을 기대하고 있기 때문에 마지막 줄 바꿈을 이스케이프 \ 허용하는 오류로'읽기'종료하게됩니다 용의자. 또한 파일에서 마지막 백 슬래시를 제거하고 결과를 확인하십시오. –

답변

4

모든 줄 바꿈 문자가 이스케이프 처리되고 read은 이스케이프 처리되지 않은 줄 바꿈 문자를 읽지 않으므로 줄 바꿈하지 않고 파일 끝에 도달합니다. 그리고, help read과 같이 말한다 :

$ while read line; do echo "$line"; done < foo; echo $line 
dog cat apple 
+1

방금 ​​바운스 한 바보 같은 이론을 보니 다행 이네. –

+2

미친 물리학 자들은 거의 틀렸다. :디 – muru

관련 문제