第5回:どっちを使う?シングルクォートとダブルクォートの使い分け | はじめてのシェルスクリプト

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

System Note $ cat /proc/ai-disclosure

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

第5回:どっちを使う?シングルクォートとダブルクォートの使い分け|macOSターミナル sh入門
目次

はじめに

この連載では、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, $name

3. 変数の値を変更して試す

name="Taro Yamada"name="Hanako Sato" に変更して、もう一度実行します。

ダブルクォートを使った行は表示が変わり、シングルクォートを使った行は表示が変わらないことを確認してください。

コードの読み方

name="Taro Yamada"

この行は、空白を含む文字列 Taro Yamadaname に代入しています。

右辺をダブルクォートで囲むことで、空白を含む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 を使って、スクリプトに渡した値を扱う方法を確認します。

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

この記事を書いた人

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

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

Created by UNIX Cafe

目次