順番に読み進めながら学べます

変数とコマンド置換 — $(...) で結果を受け取る

この記事は、基礎コマンドからシェルスクリプトまでLinuxの実践的なスキルを1からマスターする「Linux入門講座の一部」です。
name=valueの代入と "$name" 参照、シングルとダブルクォートの展開差、$(date)のコマンド置換、$(( n * 2 ))の算術、readでの入力受け取りまでを、図解と端末で実習します。

変数を使う — 代入・参照

シェルスクリプトでは、値に名前を付けて何度でも使い回せます。

代入はname=valueの形で書き、=の前後に空白を入れてはいけません。

空白を入れると別のコマンドとして解釈されてエラーになります

代入した値は$nameまたは${name}で取り出します。

$nameの直後に文字を続けると変数名の一部と解釈されるため、${name}で境界を区切ります。

代入から参照への流れ
name=alice値が name に入るecho "$name"$name を値に置換alice と表示代入参照
name=aliceで値を入れ、$nameで取り出して使います。

クォート — シングルとダブルの展開差

文字列を囲む引用符には2種類あり、展開のされ方が違います

シングルクォート'...'の中は$nameも文字どおりに扱われ展開されません。

ダブルクォート"..."の中は$nameが値に置き換わります。

"Hello $name"のように文章の途中に値を入れたいときはダブルクォートを使い、$をそのまま表示したいときはシングルクォートを使います。

シングルとダブルの展開差
echo '$name'$name と表示(展開しない)echo "$name"alice と表示(展開する)
シングルクォートは$nameをそのまま、ダブルクォートは値に置き換えて表示します。
name=alice                       # = の前後に空白を入れない
echo "hello $name"               # hello alice(ダブルは展開する)
echo 'hello $name'               # hello $name(シングルは展開しない)
echo "path is ${name}/data"      # 名前の境界を {} で明示できる

ユーザ名を変数に入れ、引用符の違いで表示が変わることを確認するスクリプトを作成します。

vi quotes.shquotes.shを開き、iで挿入モードに入って、先頭行に#!/bin/shを書いてください。

② スクリプト内で名前を変数に代入し、ダブルクォートで「あいさつ文+変数」を1行、シングルクォートで同じ書き方を1行、それぞれ表示する処理を書いてください(書く内容は解答パネルからコピーして貼り付けられます)。

Escを押し、:wqで保存して終了してから、ファイルに実行権限を付けてください。

④ スクリプトを実行し、ダブルとシングルで表示が違うことを確認してください。(正しく実行できれば解説が表示されます)

Linux console
0 / 3 実行済み
Loading Linux Terminal...

コマンド置換 — $()

$(command)は、コマンドの出力結果をその場の値として使う書き方です

today=$(date +%Y-%m-%d)のように書くと、dateが出した日付がそのままtodayに入ります。

コマンドで得た結果を変数に取り込んだり、文章の中に差し込んだりするときに使います。

コマンド置換の流れ
$(date)2026-06-18today=$(date)出力で置換today=2026-06-18date を実行コマンド置換代入
$(date)dateを実行した出力に置き換わり、today=$(date)でその値が変数に入ります。
today=$(date +%Y-%m-%d)          # date の出力を変数に取り込む
echo "today is $today"           # 取り込んだ値を文章に埋め込む
user=$(whoami)                   # 別のコマンドの出力も値にできる
echo "user: $user"

コマンド置換$()でコマンドの出力を変数に取り込み、メッセージに埋め込むスクリプトを作成します。

vi datestamp.shdatestamp.shを開き、iで挿入モードに入って、先頭行に#!/bin/shを書いてください。

② スクリプト内で、dateの出力をコマンド置換$()で変数に取り込み、その変数をダブルクォートの文章に埋め込んで1行で表示する処理を書いてください(書く内容は解答パネルからコピーして貼り付けられます)。

Escを押し、:wqで保存して終了してから、ファイルに実行権限を付けてください。

④ スクリプトを実行し、日付を含むメッセージが表示されることを確認してください。

Linux console
0 / 3 実行済み
Loading Linux Terminal...

算術展開 — $(( ))

$(( ))の中は整数の算術計算です。

$(( 3 + 4 ))7に置き換わります。

足し算は+、引き算は-、掛け算は*、割り算は/、余りは%が使えます。

変数は$を付けず、$(( n * 2 ))のようにそのまま名前で書けます。

算術展開のしくみ
$(( 3 + 4 ))式を計算7 に置換n=5$(( n * 2 ))10 に置換
$(( ))の中の式が計算され、$(( 3 + 4 ))7n=5なら$(( n * 2 ))10になります。
echo "sum: $(( 10 + 5 ))"        # 足し算は 15
n=7
echo "double: $(( n * 2 ))"      # 変数は $ なしで書ける
echo "rest: $(( 17 % 5 ))"        # 余りは % で 2

算術展開$(( ))で整数の計算をするスクリプトを作成します。

vi calc.shcalc.shを開き、iで挿入モードに入って、先頭行に#!/bin/shを書いてください。

② スクリプト内で2つの数を変数に代入し、$(( ))を使って和・積・余りなど複数の計算を行い、結果を1行で表示する処理を書いてください(書く内容は解答パネルからコピーして貼り付けられます)。

Escを押し、:wqで保存して終了してから、ファイルに実行権限を付けてください。

④ スクリプトを実行し、計算結果が表示されることを確認してください。

Linux console
0 / 3 実行済み
Loading Linux Terminal...

入力を受け取る — read

read v入力を1行読み取り、変数vに入れます。

スクリプトの中で利用者に値を尋ねたいときに使います。

本講座のコンソールでは、printf 'value\n' | ./greet.shのように入力をパイプで渡すと安定して動かせます。

readの前にechoで問いかけを出すと、何を入力すればよいかが分かりやすくなります。

read で入力を受け取る
echo "enter:"問いかけを表示入力待ち値をパイプで渡すread nn=7
read nは1行を読み取ってnに入れます。printfで値をパイプで渡すと、手で打たずにreadへ届きます。
echo "enter your name:"          # 何を入力するか問いかける
read who                         # 1行を読み取り who に入れる
echo "hi, $who"                  # 受け取った値を文章に埋め込む
printf 'bob\n' | (read who; echo "hi, $who")   # 入力はパイプでも渡せる

readで入力を1行受け取り、あいさつ文に埋め込むスクリプトを作成します。

vi greet.shgreet.shを開き、iで挿入モードに入って、先頭行に#!/bin/shを書いてください。

② スクリプト内で、echoで問いかけを表示し、readで名前を1行読み取って、その名前をダブルクォートのあいさつ文に埋め込んで表示する処理を書いてください(書く内容は解答パネルからコピーして貼り付けられます)。

Escを押し、:wqで保存して終了してから、ファイルに実行権限を付けてください。

④ 入力をパイプで渡してスクリプトを実行し、入力した名前を含むあいさつが表示されることを確認してください。

Linux console
0 / 3 実行済み
Loading Linux Terminal...

コマンド置換で件数をメッセージに埋め込む

コマンド置換$()は、ファイル数のような「数えた結果」を変数に取り込むときによく使います。

n=$(ls *.txt | wc -l)のように書くと、lswc -lの連携結果がnに入ります。

その変数をダブルクォートの文章に埋め込むと、件数を含む読みやすい1行メッセージを組み立てられます

件数をメッセージに埋め込む
ls vdemo/*.txt件数 = 2n=$( ... )$n を文に埋め込むtxt files: 2wc -l で数える件数を数えるメッセージに埋め込む
lswc -lで数えた件数がコマンド置換でnに入り、文章に埋め込むとtxt files: 2と表示されます。

テキストファイルの数をコマンド置換で変数に取り、メッセージに埋め込んで表示するスクリプトを作成します。

① 数えるための素材として、mkdir -p vdemoで作業用ディレクトリを作り、printf 'a\n' > vdemo/a.txtのように.txtファイルを2つ作成してください。

vi count-txt.shcount-txt.shを開き、iで挿入モードに入って、先頭行に#!/bin/shを書いてください。

③ スクリプト内で、vdemo内の.txtファイルの個数をコマンド置換で変数に取り、ダブルクォートの文章にその変数を埋め込んで件数入りのメッセージを表示する処理を書いてください(書く内容は解答パネルからコピーして貼り付けられます)。

Escを押し:wqで保存し、実行権限を付けてから実行し、件数を含むメッセージが表示されることを確認してください。

Linux console
0 / 3 実行済み
Loading Linux Terminal...
QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1シェル変数への代入で正しい書き方はどれですか?

Q2echo '$name'はどう表示されますか(name=aliceのとき)?

Q3コマンドの出力を値として変数に入れる書き方はどれですか?