コマンド置換 $(...)
$(...) の形式で、コマンドの実行結果(標準出力)を変数に代入したり、文字列の中に埋め込んだりすることができます。
コマンドの実行結果を変数に代入する
result=$(echo 'Hello World')
echo "${result}"
複数行の出力を代入する
コマンドの出力に改行が含まれる場合、参照時にダブルクォートで囲むかどうかで結果が変わります。
ダブルクォートあり(改行を維持)
list=$(seq 3)
echo "${list}"
クォートなし(スペース区切り)
list=$(seq 3)
echo ${list}
文字列の中での展開
echo "実行結果: $(echo '成功')"
バッククォート `...` との比較
`...` (バッククォート)でも同様の結果が得られますが、$(...) はエスケープなしで入れ子(ネスト)にすることができます。
$(...) による入れ子
nested=$(echo "外側: $(echo '内側')")
echo "${nested}"
バッククォートによる入れ子
バッククォートで入れ子にするには、内側のバッククォートをエスケープ(\`)する必要があります。
result=`echo "外側: \`echo '内側'\`"`
echo "${result}"