Bash 스크립트를 작성할 때,당신은 때때로 자신을 찾을 수 있는 상황에서 필요한 파일을 읽으십시오. 예를 들어 스크립트에서 처리해야하는 데이터가 포함 된 텍스트 파일이있을 수 있습니다.

이 튜토리얼에서는 Bash 에서 파일을 한 줄씩 읽는 방법에 대해 설명합니다.,

파일을 읽기 라인에 의해 선 Syntax#

가장 일반적인 구문을 읽기 위해 파일을 한줄씩은 다음과 같습니다:

while IFS= read -r line; do printf '%s\n' "$line"done < input_file

또는 이에 상응하는 하나의 온라인 버전:

while IFS= read -r line; do printf '%s\n' "$line"; done < input_file

어떻게 작동하나요?

입력 파일(input_file)은 while 루프로 리디렉션 된 파일의 이름입니다. read명령은 파일 줄을 한 줄씩 처리하여 각 줄을line변수에 할당합니다. 모든 라인이 처리되면 while 루프가 종료됩니다.,

기본적으로read명령을 해석하여 백슬래쉬로 탈출자고 제거하는 모든이 앞뒤 흰색 공간을 보유하고 있으며,때로는 원치 않는 동작이 발생할 수 있습니다. 사용하지 않는 백슬래시 탈출을,우리를 호출하는 명령-r옵션을 사용하지 않 트리밍,내부 필드 구분(IFS)을 삭제합니다.

코드를 더 이식 가능하게 만들고 원치 않는 동작을 피하기 위해echo대신 사용하고 있습니다., 예를 들어 라인에”-e”와 같은 값이 포함되어 있으면 에코 옵션으로 처리됩니다.

줄 단위로 파일 읽기 예제#

다음 예제를 살펴 보겠습니다. 가 있다고 가정하겠습니다 라는 이름의 파일distros.txt목록을 포함하는 몇몇을의 가장 인기 있는 리눅스 배포판,그리고 그들의 패키지 관리자는 쉼표로 구분(,)

배포판.,txt
Ubuntu,aptDebian,aptCentOS,yumArch Linux,pacmanFedora,dnf

파일을 읽을 줄 당신은 다음 코드를 실행하에서 당신의 터미널:

while IFS= read -r line; do printf '%s\n' "$line"done < distros.txt

이 코드를 읽어 파일이 라인에 의해,각각의 라인을 변수이고,그것을 인쇄한다. 기본적으로cat명령을 사용하여 파일 내용을 표시하는 것과 동일한 출력을 볼 수 있습니다.

apt 를 사용하는 배포판 만 인쇄하려면 어떻게해야합니까?, 하나의 방법이 사용하는 것입니다.if문 및 체크인 경우 포함하는 적절한 하위 문자열

while IFS= read -r line; do if ]; then printf '%s\n' "$line" fidone < distros.txt
Ubuntu,aptDebian,apt

을 읽을 때 파일이 라인에 의해 라인,당신은 또한 전달할 수 있습니다 더 이상 하나의 변수를read명령 는 분할됩니다 라인으로 필드를 기반으로IFS. 첫 번째 필드는 첫 번째 변수에 할당되고 두 번째 필드는 두 번째 변수에 할당됩니다. 변수보다 많은 필드가 있으면 남은 필드가 마지막 변수에 할당됩니다.,

다음 예에서,우리는 설정IFS을 쉼표(,)그리고 전달하는 두 변수를distropmread명령입니다.,erything 에서의 시작이 될 때까지 라인 번호가 할당 첫 번째 변수(distro),및 나머지 라인의 할당됩니다 두 번째 변수(pm):

while IFS=, read -r distro pm; do printf '%s is the package manager for %s\n' "$pm" "$distro"done < distros.txt
apt is the package manager for Ubuntuapt is the package manager for Debianyum is the package manager for CentOSpacman is the package manager for Arch Linuxdnf is the package manager for Fedora

의 다른 파일을 읽는 방법#

프로세스를 사용하여 대체#

프로세스로 대체할 수 있는 기능을 사용하는 출력에서 명령 file:

while IFS= read -r line; do printf '%s\n' "$line"done < <(cat input_file )

를 사용하여 여기에는 문자열#

여기에는 문자열의 변형은 여기에 문서입니다., 문자열(cat input_file )유지바꿈:

while IFS= read -r line; do printf '%s\n' "$line"done <<< $(cat input_file )

를 사용하여 파일 설명#

을 제공할 수도 있습니다 입력을 반복 사용하여 파일 설명:

while IFS= read -r -u9 line; do printf '%s\n' "$line"done 9< input_file

으로 작업할 때 파일기술자,숫자를 사용하 4~9 충돌을 피하기 위하여 포탄을 가진 내부의 파일기술자.

결론#

Bash 에서는 while 루프와read명령을 사용하여 줄 단위로 파일을 읽을 수 있습니다.