2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

while read

작성: sangseek | 게시 날짜: 2026/06/18 | 조회수: 9
[ 편집불가 ]

간단히 말하면, 쉘 스크립트에서 "while read"는 표준 입력(또는 파일/파이프로 연결된 입력)을 한 줄씩 읽어 그 줄을 변수에 저장한 뒤 루프 바디를 반복 실행하는 구조입니다. read 명령이 입력을 읽는 한(즉 EOF가 될 때까지) 루프가 계속됩니다. 주요 특징과 사용법 요약 - 기본 패턴: while read 변수; do ... 변수에 대해 처리 done < 파일 또는 명령 | while read 변수; do ... done - 한 줄 단위로 읽음: read는 기본적으로 개행(\n)을 구분자로 하여 한 줄을 읽고 이를 지정한 변수에 저장합니다. - IFS(Internal Field Separator): read는 IFS에 따라 단어 분할을 합니다. 보통 공백(스페이스, 탭, 개행)으로 분할되므로 전체 줄을 그대로 얻고 싶으면 IFS=로 비워둡니다. - 백슬래시 처리(-r): 기본 read는 백슬래시를 이스케이프 문자로 해석할 수 있으므로, 원본 그대로 읽으려면 -r 옵션을 사용합니다. 권장: IFS= read -r line - 여러 변수로 읽기: read a b c → 공백으로 구분된 첫 항목은 a, 두 번째는 b, 나머지 전체는 c에 들어갑니다. - 옵션들: - -r: 백슬래시 이스케이프 비활성화(권장) - -a 배열: 공백으로 나누어 배열에 저장 (bash) - -d delim: 구분자를 지정(예: -d ''로 NUL 구분) - -n N: N 문자만 읽음 - -t sec: 타임아웃 - -s: 입력 숨김(비밀번호 등) - 파이프와 서브셸 주의: 대부분의 셸에서 명령의 오른쪽(또는 전체 파이프라인)은 서브셸에서 실행됩니다. 따라서 cmd | while read ...; do var=... done 같은 방식으로 루프 내부에서 설정한 변수는 루프 밖에서 유지되지 않을 수 있습니다. 이 문제를 피하려면 파일 리다이렉션을 사용하거나 프로세스 치환을 사용: while IFS= read -r line; do ...; done < file 또는 while IFS= read -r line; do ...; done < <(cmd) - 마지막 줄의 개행이 없을 때(EOF 직전 줄에 개행 없음): 일부 상황에서 마지막 줄이 처리되지 않거나 read가 비정상 반환하는 문제가 있어 안전한 패턴으로 while IFS= read -r line || [ -n "$line" ]; do ... done < file 를 쓰기도 합니다. - CRLF(Windows 개행) 처리: 윈도우 개행(\r\n)이 있으면 라인 끝에 '\r'이 남을 수 있으므로 필요하면 line=${line%$'\r'}로 제거. - NUL 구분(파일명 안전 처리): find -print0와 같이 NUL로 구분된 입력을 처리할 때는 read -d '' 또는 read -r -d '' -a 등 사용. 간단한 권장 예 - 파일을 안전하게 한 줄씩 읽어 처리: while IFS= read -r line; do echo "$line" done < file.txt - NUL 구분 파일명 처리: find . -type f -print0 | while IFS= read -r -d '' file; do echo "파일: $file" done 요약: "while read"는 입력을 한 줄씩 읽어 루프를 도는 매우 흔한 쉘 패턴이며, IFS와 -r 옵션, 파이프/서브셸 동작, 마지막 줄/CR 처리 같은 세부 사항을 주의해서 사용해야 합니다.
내용이 부정확하다면 싫어요를 누르세요.