コマンド置換 $(...)

コマンド置換 $(...)

$(...) の形式で、コマンドの実行結果(標準出力)を変数に代入したり、文字列の中に埋め込んだりすることができます。

コマンドの実行結果を変数に代入する

code
result=$(echo 'Hello World')
echo "${result}"
stdout
Hello World

複数行の出力を代入する

コマンドの出力に改行が含まれる場合、参照時にダブルクォートで囲むかどうかで結果が変わります。

ダブルクォートあり(改行を維持)

code
list=$(seq 3)
echo "${list}"
stdout
1
2
3

クォートなし(スペース区切り)

code
list=$(seq 3)
echo ${list}
stdout
1 2 3

文字列の中での展開

code
echo "実行結果: $(echo '成功')"
stdout
実行結果: 成功

バッククォート `...` との比較

`...` (バッククォート)でも同様の結果が得られますが、$(...) はエスケープなしで入れ子(ネスト)にすることができます。

$(...) による入れ子

code
nested=$(echo "外側: $(echo '内側')")
echo "${nested}"
stdout
外側: 内側

バッククォートによる入れ子

バッククォートで入れ子にするには、内側のバッククォートをエスケープ(\`)する必要があります。

code
result=`echo "外側: \`echo '内側'\`"`
echo "${result}"
stdout
外側: 内側