実務で頻出する「変数・展開・クォート」関連の用語を、一言定義+最小実例でサッと確認。
シェルスクリプトの基礎として重要な「変数の扱い方」「展開ルール」「クォートの違い」を整理します。
このページで達成できること
- シェル変数と環境変数の違いを理解
- 各種展開(パラメータ展開・コマンド置換・算術展開)の使い分けを習得
- クォートの種類と効果を理解し、意図せぬ展開を防ぐ
- スクリプトの安全性・可読性を高める基本を身につける
すぐ引けるミニ索引
| 用語 | 一言で | 代表コマンド/例 |
|---|---|---|
| シェル変数 | シェル内でのみ有効な変数 | VAR=abc |
| 環境変数 | 子プロセスにも継承される変数 | export VAR=abc |
| パラメータ展開 | 変数の値を呼び出す仕組み | echo $VAR |
| コマンド置換 | コマンドの出力を変数に代入 | VAR=$(date) |
| 算術展開 | 式を評価して数値に置換 | $((1+2)) |
| クォート(’ “) | 展開を制御する仕組み | 'abc', "abc$VAR" |
| バックスラッシュ | 特殊文字をエスケープ | echo \" |
| Here document | 複数行入力を変数展開付きで渡す | cat <<EOF ... EOF |
用語解説(繰り返しブロック)
シェル変数
とは:シェル内のみで有効な変数。環境には渡らない。
最小実例
VAR=hello
echo $VAR
bash -c 'echo $VAR' # 何も表示されない
関連:環境変数 / export
落とし穴:スクリプト内で export を忘れると子プロセスに伝わらない。
環境変数
とは:シェルから子プロセスに継承される変数。
最小実例
export VAR=world
bash -c 'echo $VAR' # world
関連:シェル変数 / 初期化ファイル
落とし穴:シェルを閉じると消える → .bashrc などで永続化。
パラメータ展開
とは:変数の値を参照したり加工する仕組み。
最小実例
NAME="Alice"
echo "Hello $NAME"
echo "${NAME:0:3}" # 部分文字列 Ali
関連:${var:-default} / ${#var}
落とし穴:中括弧 {} を忘れると意図しない展開になることがある。
コマンド置換
とは:コマンドの出力結果を展開して使う仕組み。
最小実例
DATE=$(date +%F)
echo $DATE
関連:バッククォート `cmd` 形式 / $() 推奨
落とし穴:改行は空白に畳まれる → mapfile 等を検討。
算術展開
とは:数値計算を実行して結果を展開。
最小実例
echo $((1+2*3)) # 7
関連:let / expr
落とし穴:数値でなく文字列を渡すとエラーなく0になることがある。
クォート(quoting)
とは:文字列の展開や解釈を制御する記法。
最小実例
echo '* is literal' # 展開されない
echo "* expands $HOME" # 展開される
関連:シングルクォート / ダブルクォート / バックスラッシュ
落とし穴:正規表現やJSONを渡すときはシングルクォートが安全。
バックスラッシュ(\)
とは:直後の1文字をエスケープして特別な意味を無効化。
最小実例
echo \"Hello\"
関連:クォート / 特殊文字
落とし穴:多用すると可読性が落ちる → クォートを優先。
Here document
とは:複数行文字列を標準入力として渡す構文。変数展開も可能。
最小実例
cat <<EOF
User: $USER
Date: $(date)
EOF
関連:リダイレクト / ヒアストリング
落とし穴:クォート付き <<'EOF' にすると変数展開されない。
運用の現場Tips
- クォートの使い分け:
- 一重
' '→ 完全リテラル - 二重
" "→ 変数展開あり - バックスラッシュ
\→ 最小限エスケープ
- 一重
- スクリプトの堅牢化:引数展開は必ず
"${var}"のようにクォートする - デバッグ:
set -xで展開後の実行内容を確認可能 - 多段展開の罠:コマンド置換や算術展開はクォート有無で挙動が変わる

