HOWTO · Bash

Bash에서 문자열을 배열로 분할

이 튜토리얼에서는 bash에서 read 명령, tr 명령 및 매개변수 확장을 사용하여 문자열을 배열로 분할하는 방법을 설명합니다.

이 페이지의 내용

이 튜토리얼은 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 명령은 문자열 변수 $addrstr 명령으로 파이프하여 문자열 변수를 구분 기호 ;로 분할합니다. 문자열이 분할되면 값이 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