Bashで文字列を結合する3つの書き方

  • Bash
  • Shell

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

Bashで文字列を結合する方法をいくつか確認した。

1. 変数を隣接させる

一番シンプルなのはこれ。

#!/bin/bash
string="Hello"
echo "${string} world!"

Hello world!が出る。ダブルクォートの中に${string}と書くだけで、後ろの world!とくっつく。

波括弧で囲んでいるのは境界を明示するため。囲まないと、

ターミナル
echo "$string_world"

はstringではなくstring_worldという別の変数を探しにいく。存在しないので空文字になり、結合として成立しない。${string}_worldと書けばstringの値に_worldが続く。

2. +=で追記する

複数回に分けて結合したいときは+=が使える。

#!/bin/bash
string="Hello"
string+=" world"
string+="!"
echo "$string"

これもHello world!になる。ループの中で文字列を組み立てていくようなケースはこちらの方が読みやすい。

3. printf -vで組み立てる

フォーマットを指定しながら結合したい場合はprintf -vが使える。

#!/bin/bash
name="Hello"
printf -v string "%s world!" "$name"
echo "$string"

-v stringで結果を変数stringに代入する。echoを経由せず直接変数に入るので、値の中に%のようなフォーマット文字が混ざっていても意図せず解釈されにくい。

ダブルクォートは必須

どの方法でも、展開した変数を使うときはダブルクォートで囲む。囲まないと単語分割やグロブ展開の対象になり、値にスペースやワイルドカードが含まれると挙動が変わる。

単純な結合なら1、ループで組み立てるなら2、フォーマットを制御したいなら3、という使い分けになりそう。