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보다 오래된 경우입니다.