本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。
第5回:どっちを使う?シングルクォートとダブルクォートの使い分け | はじめてのシェルスクリプト

はじめに
この連載では、macOS のターミナルで sh を使いながら、シェルスクリプトの基本を順番に学んでいきます。
第5回では、文字列を扱うときに重要になるクォートの使い方を確認します。
この回で学ぶこと
- シングルクォートとダブルクォートの違い
- 変数展開の違い
- 空白を含む文字列をどう扱うか
- クォートを付ける理由
echoと変数を使った比較例- 初学者が混同しやすい書き方
- 実行結果の違い
文字列とクォートの基本
クォートとは何か
シェルでは、文字列を扱うときにクォートを使います。
ここで扱うクォートは、シングルクォート ' ' とダブルクォート " " の2種類です。
シングルクォート
シングルクォートで囲んだ文字列は、そのままの文字列として扱われます。
echo '$name'この場合、$name は変数として展開されません。
ダブルクォート
ダブルクォートで囲んだ文字列では、変数展開が行われます。
echo "$name"この場合、$name は変数の値に置き換えられます。
サンプルコード
quote_sample.sh に次の内容を保存します。
#!/bin/sh
name="Taro Yamada"
echo '$name'
echo "$name"
echo "Hello, $name"
echo 'Hello, $name'実行手順
1. ファイルを作成して保存する
エディタで quote_sample.sh という名前のファイルを作成し、次の内容を保存します。
#!/bin/sh
name="Taro Yamada"
echo '$name'
echo "$name"
echo "Hello, $name"
echo 'Hello, $name'2. スクリプトを実行する
次のコマンドを実行します。
sh quote_sample.sh実行結果は次のようになります。
$name
Taro Yamada
Hello, Taro Yamada
Hello, $name3. 変数の値を変更して試す
name="Taro Yamada" を name="Hanako Sato" に変更して、もう一度実行します。
ダブルクォートを使った行は表示が変わり、シングルクォートを使った行は表示が変わらないことを確認してください。
コードの読み方
name="Taro Yamada"
この行は、空白を含む文字列 Taro Yamada を name に代入しています。
右辺をダブルクォートで囲むことで、空白を含む1つの文字列として扱えます。
echo '$name'
シングルクォートで囲んでいるため、$name はそのまま表示されます。
echo "$name"
ダブルクォートで囲んでいるため、$name は変数の値に置き換えられます。
echo "Hello, $name"
文字列の一部に変数を含めたいときは、ダブルクォートが便利です。
この例では、Hello, Taro Yamada のように表示されます。
シングルクォートとダブルクォートの違い
シングルクォート
echo '$name'変数展開を行わず、書いた内容をそのまま扱います。
ダブルクォート
echo "$name"変数展開を行います。
変数の値を使いたいときは、通常はこちらを使います。
空白を含む文字列を扱う
文字列の中に空白がある場合は、クォートで囲むことが重要です。
たとえば、次のように書きます。
title="Shell Script Lesson"
echo "$title"クォートを使うことで、Shell Script Lesson 全体を1つの文字列として扱えます。
初学者がつまずきやすい点
シングルクォートでも変数が展開されると思ってしまう
シングルクォートでは、$name は変数として扱われません。
変数の値を表示したいなら、ダブルクォートを使います。
クォートを付けずに空白を含む文字列を書く
空白を含む文字列は、クォートなしでは意図した通りに扱えません。
文字列全体を ' ' または " " で囲ってください。
シングルクォートとダブルクォートを使い分けられない
変数展開が必要ならダブルクォート、不要ならシングルクォートと考えると整理しやすくなります。
よくあるエラー
思った通りに変数が表示されない
シングルクォートを使っている可能性があります。
echo "$name"のようにダブルクォートで確認してください。
空白を含む文字列がうまく扱えない
文字列をクォートで囲っているか確認してください。
title="Shell Script Lesson"のように書きます。
表示結果がそのまま $name になる
これはシングルクォートを使っているためです。
変数展開をしたいときはダブルクォートを使ってください。
練習用コード
次の内容で quote_practice.sh を作成して実行してみてください。
#!/bin/sh
fruit="green apple"
echo $fruit
echo "$fruit"
echo '$fruit'
echo "I like $fruit"
echo 'I like $fruit'それぞれの表示結果を見比べて、どの行で変数展開が起きているか確認してください。
この回で理解しておくこと
- シングルクォートでは文字列をそのまま扱う
- ダブルクォートでは変数展開が行われる
- 変数の値を文の中で使いたいときはダブルクォートが便利である
- 空白を含む文字列はクォートで囲う
- クォートの違いによって表示結果が変わる
- 文字列の扱いを正しくすると、後のスクリプトが安定しやすくなる
まとめ
今回は、シングルクォートとダブルクォートの違い、変数展開、空白を含む文字列の扱い方を確認しました。
シェルスクリプトでは、クォートの使い分けを正しく理解しておくことが重要です。
次回は、コマンドライン引数を受け取って使う方法を学びます。
次回予告
次回は「引数を受け取って使ってみよう」です。
$1 や $2 を使って、スクリプトに渡した値を扱う方法を確認します。




