Bash를 사용하여 배열로 파일 읽기

Faaiq Bilal 2023년6월20일
  1. readarray 방법을 사용하여 Bash를 사용하여 배열로 파일 읽기
  2. 일반적인 방법을 사용하여 Bash를 사용하여 배열로 파일 읽기
Bash를 사용하여 배열로 파일 읽기

이 자습서에서는 파일에서 줄을 읽고 Bash를 사용하여 배열에 로드하는 몇 가지 방법을 다룹니다.

먼저 readarray 메서드를 살펴보겠습니다. 그런 다음 파일을 Bash 배열로 읽는 보다 일반적인 접근 방식을 살펴보겠습니다.

readarray 방법을 사용하여 Bash를 사용하여 배열로 파일 읽기

readarray는 Bash 4.0과 함께 제공되는 기능입니다. 이 방법은 4.0보다 큰 모든 버전의 Bash에서 작동합니다.

현재 실행 중인 Bash 버전을 확인하려면 다음 명령을 사용할 수 있습니다.

echo ${Bash_VERSION}

Bash 버전이 4.0 미만인 경우 readarray가 작동하지 않으므로 다음 방법으로 건너뛸 수 있습니다.

다음 내용이 있는 모든 예제에 numbers.txt라는 파일을 사용합니다.

numbers.txt 파일:

1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1

이 파일을 읽고 내용을 배열에 저장하는 구문은 다음과 같습니다.

readarray -t Arr < numbers.txt

구문을 세분화하면 명령 이름으로 readarray가 있고 -t개행 문자를 제거하며 Arr은 파일 내용이 기록되는 배열의 이름입니다. numbers.txt는 읽으려는 파일의 이름입니다.

읽을 파일이 스크립트와 같은 폴더에 없으면 파일의 전체 경로를 제공해야 합니다.

이 배열의 내용은 다음 예와 같이 읽을 수 있습니다.

echo ${Arr[1]}

위의 코드는 파일의 두 번째 줄인 배열의 인덱스 1에 있는 줄을 출력합니다.

출력은 다음과 같습니다.

2 1

전체 배열을 인쇄하려면 다음 구문을 사용하십시오.

echo ${Arr[@]}

이에 대한 출력은 다음과 같습니다.

1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1

일반적인 방법을 사용하여 Bash를 사용하여 배열로 파일 읽기

일반적인 방법의 구문은 다음과 같습니다.

IFS=$'\r\n' GLOBIGNORE='*' command eval  'ArrName=($(cat filename))'

이 배열을 읽으면 이전 예제와 유사한 구문을 갖게 됩니다.

echo ${ArrName[1]}

위의 Bash 라인은 배열의 인덱스 1에 내용을 표시합니다. 그러나 전체 배열의 내용을 표시하려면 다음을 사용할 수 있습니다.

echo ${ArrName[@]}

일반적인 방법에 대한 설명

일반 구문에서 ArrName은 배열의 이름이고 cat 뒤의 filename은 읽을 파일의 이름입니다. 맞춤형 사용을 위해 이 두 변수를 수정할 것입니다.

IFS는 구분 문자를 정의하며, 이 경우 \r\n입니다. \r은 캐리지 리턴이고 \n은 줄 바꿈 문자입니다.

대부분의 최신 시스템에서는 \n이 개행 문자로 사용되는 것을 볼 수 있습니다.

GLOBIGNORE='*'는 파일 이름의 이상한 경우를 피하기 위해 안전으로 설정됩니다. 이 명령에는 GLOBIGNORE를 사용하기 때문에 Bash가 필요합니다(그리고 zsh 또는 fish와 같은 다른 쉘에서는 작동하지 않을 수도 있음).

주목해야 할 또 다른 중요한 점은 이 솔루션이 readarray보다 훨씬 느리다는 것입니다. 이것을 사용하는 유일한 이유는 Bash 버전이 버전 4.0보다 오래된 경우입니다.

관련 문장 - Bash File