📘

シェルスクリプト 文字列結合 JOIN

2024/07/28に公開

概要

シェルスクリプトで文字列の配列を特定の区切り文字で結合し、1つの文字列を生成する方法について調べました。Goのstrings.Joinのようなことです。

s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", ")) // foo,bar,baz

方法 1: IFS(内部フィールド区切り文字)を使用する

Bashシェルでは、IFS変数を使用して配列の要素を結合することができます。以下に例を示します。

#!/bin/bash

# 配列の定義
arr=("apple" "banana" "cherry")

# 区切り文字を定義
separator=", "

# IFSを変更して配列を結合
IFS="$separator"
joined_string="${arr[*]}"
unset IFS

echo "$joined_string"

このスクリプトでは、IFS変数をカンマとスペースに設定し、${arr[*]}を使用して配列の要素を結合しています。その後、IFSを元に戻しています。

方法 2: ループを使用する

ループを使用して配列の要素を結合する方法もあります。

#!/bin/bash

# 配列の定義
arr=("apple" "banana" "cherry")

# 結合された文字列を格納する変数
joined_string=""

# 区切り文字を定義
separator=", "

# ループで配列を結合
for element in "${arr[@]}"; do
    if [ -z "$joined_string" ]; then
        joined_string="$element"
    else
        joined_string="$joined_string$separator$element"
    fi
done

echo "$joined_string"

このスクリプトでは、ループを使用して配列の各要素を結合しています。最初の要素の場合はそのまま追加し、以降の要素には区切り文字を追加して結合しています。

方法 3: printfを使用する

printfコマンドを使用して配列の要素を結合することもできます。

#!/bin/bash

# 配列の定義
arr=("apple" "banana" "cherry")

# 区切り文字を定義
separator=", "

# 配列の要素を結合して表示
printf "%s$separator" "${arr[@]}"
# 末尾の区切り文字を取り除く
echo -e "\b\b"

このスクリプトでは、printfを使用して配列の各要素を出力し、最後に末尾の余分な区切り文字を取り除いています。

Discussion