Bash で文字列を配列に分割する

Fumbani Banda 2023年1月30日
  1. read コマンドを使用して文字列を Bash の配列に分割する
  2. Bash で tr コマンドを使って文字列を配列に分割する
  3. Bash でパラメータ展開を使って文字列を配列に分割する
Bash で文字列を配列に分割する

このチュートリアルでは、read コマンド、tr コマンド、およびパラメーター展開を使用して、bash で文字列を配列に分割する方法について説明します。

read コマンドを使用して文字列を Bash の配列に分割する

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} です。variablesearch に一致するパターンを検索し、それを 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
著者: Fumbani Banda
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

関連記事 - Bash String

関連記事 - Bash Array