本文へスキップ
BecomeCoder

シェルスクリプトコース · 第2章 変数とクォート · レッスン7

コマンド置換 ― 実行結果を値として取り込む

ブラウザで完結

導入

「今日の日付が入ったファイル名を作りたい」「いま何件あるかを変数に入れたい」。こういうとき、コマンドの実行結果そのものを値として使えると一気に便利になります。それが $( ) です。

説明

$(コマンド) と書くと、そのコマンドを実行して、出力結果がその場に埋め込まれます

#!/bin/bash

TODAY=$(date +%Y-%m-%d)
COUNT=$(grep ERROR logs/app.log | wc -l)

echo "日付: $TODAY"
echo "エラー件数: $COUNT"
echo "作るファイル名: backup-$TODAY.tar.gz"
flowchart LR
    A["$(date +%Y-%m-%d)"] --> B["date を実行"] --> C["2026-08-30"] --> D["その場に埋め込まれる"]

date +%Y-%m-%d+ 以降は書式指定です。%Y が年、%m が月、%d が日。date +%Y%m%d なら 20260830 のように区切りなしになります。バックアップのファイル名は、この形が定番です。

パイプを含む長い処理も、まるごと1つの値にできます。$(grep ERROR logs/app.log | wc -l) は「エラー行を数えた結果」が入ります。

古い書き方に `コマンド`(バッククォート)もあります。意味は同じですが、入れ子にできず読みにくいので、新しく書くときは $( ) を使ってください。他人のスクリプトで見かけたら「あぁ古い書き方だな」と読めれば十分です。

やってみよう

スクリプトを実行して、日付と件数が埋め込まれることを確かめましょう。次に echo "ホスト名: $(hostname)"echo "ファイル数: $(ls | wc -l)" を足して、どんなコマンドでも値にできることを体感してください。

演習

logs/access.log の行数を $( ) で取り出し、アクセス数: 10 の形で表示してください。

ヒント1を見る

行数は wc -l < logs/access.log(または cat logs/access.log | wc -l)で数えられます。

ヒント2を見る

echo "アクセス数: $(cat logs/access.log | wc -l)"

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

シェルスクリプト(シミュレート)

スクリプトを書くエディタと、それを動かす仮想シェルを読み込みます(本物のbashではなく、動きを再現した学習用の環境です)。
スクロールして表示された時点でも自動で読み込まれます。