第18回 コマンド置換を使ってみよう:$()でコマンドの実行結果を変数に取り込む | はじめてのシェルスクリプト

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

第18回 コマンド置換を使ってみよう:$()でコマンドの実行結果を変数に取り込む | はじめてのシェルスクリプト

はじめてのシェルスクリプト | 第18回

目次

はじめに

この連載では、macOS のターミナルで sh を使いながら、シェルスクリプトの基本を順番に学んでいきます。

前回(第17回)では、リダイレクトとパイプを使って、コマンドの出力先を変えたりコマンド同士をつないだりする方法を学びました。コマンドを組み合わせる楽しさが少し見えてきたのではないでしょうか。

シェルスクリプトでは、コマンドの実行結果を変数に入れて使いたい場面が多くあります。たとえば「今日の日付をファイル名に含めたい」「現在のディレクトリ名を表示に使いたい」といったケースです。こうしたときに役立つのが「コマンド置換」という仕組みです。

第18回では、$(...) を使ってコマンドの実行結果を文字列として取り込む方法を学びます。これを使えると、動的な処理や実行時の情報を活用したスクリプトが書けるようになります。

この回で学ぶこと

  • $(...) とは何か
  • コマンドの結果を変数へ入れる方法
  • datepwd の例
  • コマンド結果を再利用する考え方
  • 文字列と組み合わせる方法
  • 実行結果がどう入るか
  • 初学者がつまずきやすい書き方

コマンド置換とは何か

コマンドの結果を取り込む

コマンド置換は、コマンドの実行結果を文字列として使うための書き方です。

書き方は $(...) です。

たとえば、現在の日付を取り込みたい場合は次のように書きます。

today=$(date)

この場合、date コマンドの実行結果が today に入ります。

そのまま表示にも使える

変数に入れず、そのまま表示することもできます。

echo "$(pwd)"

この例では、現在のディレクトリが表示されます。

サンプルコード

command_substitution_sample.sh に次の内容を保存します。

#!/bin/sh

today=$(date)
current_dir=$(pwd)

echo "Today: $today"
echo "Current directory: $current_dir"

実行手順

1. ファイルを作成して保存する

エディタで command_substitution_sample.sh という名前のファイルを作成し、次の内容を保存します。

#!/bin/sh

today=$(date)
current_dir=$(pwd)

echo "Today: $today"
echo "Current directory: $current_dir"

2. スクリプトを実行する

次のコマンドを実行します。

sh command_substitution_sample.sh

実行結果の例です。

Today: Fri Apr 24 15:00:00 JST 2026
Current directory: /Users/username/Desktop/shell-script-basics

日付部分は実行した時点の結果になります。

コードの読み方

today=$(date)

date コマンドの実行結果を today に入れています。

current_dir=$(pwd)

pwd コマンドの実行結果を current_dir に入れています。

echo “Today: $today”

コマンド置換で取り込んだ結果を、普通の変数と同じように使っています。

コマンド結果を再利用する

コマンド置換の便利な点は、実行結果を一度変数へ入れて、後から何度でも使えることです。

たとえば、現在のディレクトリを何回も表示したいときや、日付をファイル名やメッセージに入れたいときに使えます。

文字列と組み合わせる

コマンド置換は、文字列の中でも使えます。

echo "Directory: $(pwd)"

このように書くと、実行結果をそのまま文の中へ埋め込めます。

初学者がつまずきやすい点

$(...) の中にコマンドを書くことを忘れる

$(...) の中には、実行したいコマンドを書きます。

ただの文字列を書くものではありません。

変数展開と混同する

$name は変数の値を取り出す書き方です。

$(pwd) はコマンドの結果を取り込む書き方です。

結果が毎回変わることを忘れる

date のようなコマンドは、実行した時点によって結果が変わります。

よくあるエラー

思った結果が入らない

$(...) の中のコマンドが正しいか確認してください。

変数が空になる

コマンド自体が期待した出力をしているか確認してください。

まずはターミナルでそのコマンド単体を実行してみると分かりやすいです。

文字列としてそのまま表示されてしまう

$(...) の形が崩れていないか確認してください。

かっこや $ の書き忘れがないか見直します。

練習用コード

次の内容で reuse_command_result.sh を作成して実行してみてください。

#!/bin/sh

now=$(date)
place=$(pwd)

echo "Now: $now"
echo "Place: $place"
echo "You are working in $place"

実行するたびに結果がどう変わるか確認してください。

この回で理解しておくこと

  • $(...) はコマンド置換の書き方である
  • コマンドの実行結果を文字列として取り込める
  • 取り込んだ結果は変数へ入れて再利用できる
  • datepwd のようなコマンドと相性が良い
  • 文字列の中でもコマンド置換を使える
  • 変数展開とコマンド置換は別の役割である

まとめ

今回は、$(...) を使ってコマンドの結果を取り込み、変数へ入れて再利用する基本を確認しました。

コマンド置換を使えるようになると、コマンドの結果をそのままスクリプトの中で活用しやすくなります。

次回は、case 文を使って分岐を整理する方法を学びます。

次回予告

次回は「case文で分岐を整理しよう」です。

複数の候補に応じて処理を分ける書き方を確認します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次