📘
シェルスクリプト 文字列結合 JOIN
概要
シェルスクリプトで文字列の配列を特定の区切り文字で結合し、1つの文字列を生成する方法について調べました。Goのstrings.Joinのようなことです。
s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", ")) // foo,bar,baz
IFS
(内部フィールド区切り文字)を使用する
方法 1: 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"
このスクリプトでは、ループを使用して配列の各要素を結合しています。最初の要素の場合はそのまま追加し、以降の要素には区切り文字を追加して結合しています。
printf
を使用する
方法 3: printf
コマンドを使用して配列の要素を結合することもできます。
#!/bin/bash
# 配列の定義
arr=("apple" "banana" "cherry")
# 区切り文字を定義
separator=", "
# 配列の要素を結合して表示
printf "%s$separator" "${arr[@]}"
# 末尾の区切り文字を取り除く
echo -e "\b\b"
このスクリプトでは、printf
を使用して配列の各要素を出力し、最後に末尾の余分な区切り文字を取り除いています。
Discussion