🐕

Shellで半角スペースが含まれる文字列の配列をループさせる

2023/05/24に公開

Shellで文字列の配列をループさせたいことってありませんか?
例えば git log で最新から特定のコミットまでのコミットタイトルを配列に格納して、ループを回すとしたら、

PRS=($(git log HEAD...<特定のコミットハッシュ、もしくはタグ> --pretty-format:%s))
for PR in "${PRS[@]}";do
	echo $PR
done

この場合、出力結果はこのようになって欲しいはずです

コミットタイトル 1
コミットタイトル 2
コミットタイトル 3

しかし、実際はこのようになります。

コミットタイトル
1
コミットタイトル
2
コミットタイトル
3

これはShellでは配列の区切りが半角スペースで行われてしまっていることが原因です。
正確にコミットタイトルを出力させるには区切り文字を改行コードに設定してやる必要があります。

IFS=$'\n'
PRS=($(git log HEAD...<特定のコミットハッシュ、もしくはタグ> --pretty-format:%s))
for PR in "${PRS[@]}";do
	echo $PR
done
コミットタイトル 1
コミットタイトル 2
コミットタイトル 3

参考

https://www.server-memo.net/shellscript/ifs.html

Discussion