DESIGN / CODE / INFRA / AI

解説

シェルの一重・二重引用符は何が違う?変数展開と空白をBashで確かめよう

シェルで変数を表示したいのに、そのままの名前が出たり、一つの値が分かれたりする。引用符の違いを、架空の短い値で確かめてみよう。

シェルの一重・二重引用符は何が違う?変数展開と空白をBashで確かめよう
保存リストを見る →
この記事の道しるべ 4項目

シェルで変数を表示したいのに、そのままの名前が出たり、一つの値が分かれたりする。引用符の違いを、架空の短い値で確かめてみよう。

対象はBash。PowerShellやWindowsのコマンドプロンプトへ、同じ書き方をそのまま当てはめないでね。以下は表示だけの練習で、秘密情報は使わないよ。

一重引用符は文字をそのまま保つ

practice_value='blue card'
printf '<%s>\n' '$practice_value'

表示は<$practice_value>。一重引用符の中では、$practice_valueという文字がそのまま使われる。Bash公式の一重引用符の説明で確認できるよ。

二重引用符では変数を展開する

printf '<%s>\n' "$practice_value"

こちらは<blue card>が一つ表示される。変数を展開しつつ、空白を含む値を一つの引数として扱う例だよ。引数は、コマンドへ渡す一つずつの値のこと。

引用符を外すと、分割などが関係する

printf '<%s>\n' $practice_value

この練習では<blue>と<card>が別の行になる。引用しない変数展開では、単語分割やファイル名展開などが関係するため、任意のファイル名や値を扱うときに注意が必要なんだ。

編集部ではBashの一時的なプロセスで三つの出力を確認した。既存のファイルやシェル設定は変えず、最後に次で練習用の変数を消せるよ。

unset practice_value

二重引用符が何でも無効にするわけではない

Bash公式の二重引用符の説明は、$など一部の文字が特別な意味を保つと説明している。二重引用符へ入れれば、未知のコマンド断片を安全な文字へ変換できる、という意味ではないよ。

秘密の変数の中身を、確認のために画面やログへ表示する必要はない。実際のデプロイ設定では、値の表示ではなく、設定の有無や対象を確認しよう。Composeの.envとenv_fileで扱う設定ファイルと、シェルがコマンドを解釈する段階も分けて考えてね。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。