Bash에서 문자열을 배열로 분할
이 튜토리얼은 read
명령, tr
명령 및 매개변수 확장을 사용하여 bash에서 문자열을 배열로 분할하는 방법을 설명합니다.
Bash에서 read
명령을 사용하여 문자열을 배열로 분할
read
명령은 Linux 시스템에 내장된 명령입니다.
라인의 내용을 변수로 읽는 데 사용됩니다. 또한 쉘 변수에 할당된 문자열의 단어를 분할합니다.
아래 스크립트에서 변수 $addrs
문자열은 read
명령에 전달됩니다. IFS
는 문자열 변수에서 단어 경계 역할을 하는 구분 기호를 설정합니다.
이것은 -
가 우리의 경우 단어 경계임을 의미합니다. -a
옵션은 read
명령에 배열로 분할된 단어를 저장하도록 지시하고 -r
옵션은 read
명령에 이스케이프 문자를 있는 그대로 처리하고 해석하지 않도록 지시합니다.
분할된 단어는 ip_array
변수에 저장됩니다. 배열 내부의 개별 요소에 액세스하려면 ${array name[index]}
구문을 사용합니다.
아래 스크립트에서 ip_array
는 어레이 이름이고 0
은 어레이의 첫 번째 요소를 나타내는 인덱스입니다.
#!/usr/bin/env bash
addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"
IFS=',' read -ra ip_array <<< "$addrs"
printf "${ip_array[0]}\n"
출력은 배열의 첫 번째 요소를 표시합니다.
192.168.8.1
아래 스크립트는 배열을 반복하는 for
루프를 추가하고 echo
명령을 사용하여 모든 요소를 인쇄합니다.
#!/usr/bin/env bash
addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"
IFS=',' read -r -a ip_array <<< "$addrs"
for ip in "${ip_array[@]}"
do
echo "$ip"
done
아래 출력은 배열 내부에 있는 모든 요소를 표시합니다.
192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4
Bash에서 tr
명령을 사용하여 문자열을 배열로 분할
tr
명령은 translate
의 약어입니다.
표준 입력에서 문자를 번역, 삭제 및 압축하고 결과를 표준 출력에 씁니다. 명령줄이나 bash 스크립트에서 텍스트를 조작하는 데 유용한 명령입니다.
반복되는 문자를 제거하고 소문자를 대문자로 변환하고 문자를 교체하는 데 사용할 수 있습니다.
아래의 bash 스크립트에서 echo
명령은 문자열 변수 $addrs
를 tr
명령으로 파이프하여 문자열 변수를 구분 기호 ;
로 분할합니다. 문자열이 분할되면 값이 ip_addrs
배열에 할당됩니다.
for
루프는 $ip_addrs
배열을 반복하고 printf
명령을 사용하여 모든 값을 출력합니다.
#!/bin/bash
addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"
ip_addrs=(`echo $addrs | tr ',' ' '`)
for ip in "${ip_addrs[@]}"
do
printf "$ip\n"
done
아래 출력은 배열 내부에 있는 모든 요소를 표시합니다.
192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4
매개변수 확장을 사용하여 Bash에서 문자열을 배열로 분할
아래 스크립트는 매개변수 확장을 사용하여 문자를 검색하고 대체합니다.
매개변수 확장에 사용되는 구문은 ${variable//search/replace}
입니다. 변수
에서 search
와 일치하는 패턴을 검색하고 replace
로 대체합니다.
이 경우 스크립트는 ,
패턴을 검색하고 $addrs
문자열 변수의 공백으로 대체합니다. ${addrs//-/ }
주위의 괄호는 ip_array
라는 새 문자열의 배열을 정의하는 데 사용됩니다.
for
루프를 사용하여 ip_array
의 모든 요소를 반복하고 echo
명령을 사용하여 표시합니다.
#!/bin/bash
addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"
set -f
ip_array=(${addrs//,/ })
for ip in "${!ip_array[@]}"
do
echo "[$ip] ${ip_array[ip]}"
done
아래 출력은 배열 내부에 있는 모든 요소를 표시합니다.
[0] 192.168.8.1
[1] 192.168.8.2
[2] 192.168.8.3
[3] 192.168.8.4
관련 문장 - Bash String
- Bash는 문자열에서 줄 바꿈을 제거합니다.
- Bash를 사용하여 문자열의 문자 바꾸기
- Bash에서 문자열 길이 얻기
- Bash에서 문자열을 변수로 분할
- Bash에서 문자열을 정수로 변환
- Bash의 문자열 비교 연산자