export – 環境変数の設定/確認/削除のコマンドの使い方

環境変数

export「シェル変数を子プロセスに引き継いで使える“環境変数”にする」 ためのコマンドです。
PATH の追加、APIキーの受け渡し、ビルドスクリプトや Docker/CI の設定など、日常の開発・運用で頻出します。

本記事では 設定/確認/削除 を軸に、一時設定と永続設定の違いenv/printenv/unset との使い分け、子プロセス継承の仕組み を図と実行例で整理します。

本記事ではexportコマンドについて解説しています。コマンドラインでの実行をするツールのためコマンド操作が不慣れな方は「Bash」の記事を参照してください。

結論

先に結論として、環境変数について以下の事ができます。

  • 設定export NAME=value(既存変数を環境変数化するなら export NAME
  • 確認export -p(宣言一覧)/printenv NAMEenv | grep NAME
  • 削除unset NAME(環境変数・シェル変数どちらも解除)
  • 永続化~/.bashrc(対話シェル)や ~/.bash_profile(ログインシェル)に export ... を追記

export とは(シェル変数と環境変数の違い)

  • シェル変数:現在のシェル内だけで有効(例:FOO=bar)。
  • 環境変数子プロセスにも継承される。export で昇格させる。
親シェル(bash)
 ├─ 子プロセス(bash -c ...)← export された変数だけ見える
 └─ 外部コマンド(python/node/grep など)← 同上

要点export は “見える範囲(スコープ)を広げる” スイッチ。

基本構文とオプション(-p/-n/-f)

# 基本構文
export [オプション] [変数名[=値]]


# 値と同時に環境変数化
export NAME=value

# 既存のシェル変数を環境変数化
NAME=value
export NAME

# 登録済みの環境変数一覧
export -p

# 関数をエクスポート(bash固有・子シェルに関数を渡す)
export -f funcname

# エクスポート属性の解除(環境変数→シェル変数に戻す)
export -n NAME

メモ:export -n は属性解除であって 変数自体を消すわけではありません(値は残る)。完全に消すなら unset NAME

主なオプション一覧

オプション説明使用例
(なし)すべての環境変数を表示export
変数名=値環境変数を設定export PATH=/usr/local/bin:$PATH
変数名既存のシェル変数を環境変数として登録MYVAR=hello; export MYVAR
-n 変数名環境変数の登録を解除(値は保持)export -n MYVAR
-pすべての環境変数を一覧表示(POSIX形式)export -p

export の実行例 – 環境変数を設定する(即時/一時/一括)

即時設定(よく使う)

export API_KEY="abc123"

一時設定(コマンド 1 回だけ)

API_KEY="abc123" some_command   # 左の設定は some_command の実行中にのみ有効

まとめて設定(読み込み)

# .env などから読み込む(安全のため自作する)
set -a              # 以降の読み込みで自動export
. ./my.env          # or source ./my.env
set +a

確認する(export -p/printenv/env/declare -x)

export -p          # bash の「宣言」一覧(declare -x と同義)
printenv NAME      # 値だけ表示(空なら無出力・終了コード 1)
env | grep NAME    # 環境変数の生リストから検索
declare -x NAME    # bash の宣言テーブル(デバッグで便利)

削除する(unset と注意点)

unset NAME         # 変数を完全に削除(環境/シェルどちらも消える)
  • export -n NAMEエクスポート属性だけ外す(変数は残る)。
  • 推奨:確実に消したいときは unset

一時設定 vs 永続設定(.bashrc/.bash_profile/PATH)

目的設定場所
対話的シェルで常に使いたい~/.bashrcexport PATH="$HOME/.local/bin:$PATH"
ログイン時に一度だけ実行~/.bash_profile(※)export EDITOR=vim

※ 多くの環境で ~/.bash_profile から ~/.bashrc を読み込む記述が入っています。
WSL/デスクトップLinux は .bashrc、SSHログインやmacOSは .bash_profile など運用差に注意。

PATH の永続追加(安全テンプレ)

# 末尾に追記
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
# 反映
. ~/.bashrc   # または source ~/.bashrc

子プロセス継承の挙動(比較実験)

# 1) export なし:子プロセスに渡らない
$ MYVAR=hello
$ bash -c 'echo "$MYVAR"'
# (無出力)

# 2) export あり:子プロセスに渡る
$ export MYVAR
$ bash -c 'echo "$MYVAR"'
hello

export の代表的な実務例(APIキー・PATH・外部アプリ)

API キーを渡してコマンド実行

export OPENAI_API_KEY="sk-xxxxx"
curl -H "Authorization: Bearer $OPENAI_API_KEY" https://api.example.com/v1/ping

Node/Python など外部アプリへ受け渡し

# Node.js
export NODE_ENV=production
node app.js

# Python
export DATABASE_URL="postgres://user:pass@localhost/db"
python main.py

スクリプト内の export 位置(依存コマンドより前)

#!/usr/bin/env bash
set -euo pipefail

export PATH="$HOME/.local/bin:$PATH"
export APP_ENV=production

run_build             # ← ここで APP_ENV を参照

よくあるエラー/ハマりどころ

症状原因対処
export: command not foundsh/dash で実行しているbash で実行 or #!/usr/bin/env bash を先頭へ
設定が再ログインで消える一時設定のみで永続化していない~/.bashrc or ~/.bash_profile に追記
値にスペースがあると崩れるクォート漏れexport TITLE="Hello World" のように "..."
期待したコマンドが見つからないPATH の前後順ミス先頭に追加で上書き優先:export PATH="$HOME/bin:$PATH"
変数が子に渡らないexport していないexport NAME を追加

似たコマンドとの違い(env/set/declare)

コマンド役割
exportエクスポート属性の付与/表示export NAME=value / export -p
env一時的な環境でコマンド実行/環境一覧env NAME=value cmd / env
printenv環境変数の値を表示printenv PATH
setシェルの オプション/シェル変数 表示・設定set -euo pipefail
declare -xbashの 環境変数宣言export と同義的)declare -x NAME="val"

セキュリティとベストプラクティス

  • シークレットは履歴に残さないexport API_KEY=... をそのまま履歴に残さない(例:HISTCONTROL=ignorespace を使い、先頭にスペースをつける習慣)
export API_KEY="sk-xxxx" # 先頭スペースで履歴抑制(ignorespace有効時)
  • .env を使い分け:ローカル用 .env は Git 管理外(.gitignore)。本番は 環境変数注入(CI/CD・Secrets管理) を推奨。
  • 最小権限:PATH の先頭にユーザー任意パスを入れると上書き実行のリスク。運用ポリシーに沿って順序管理。
  • export -f(関数のエクスポート)は限定的に:挙動の相違や可搬性に注意。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント