「シェルスクリプトで変数を設定したのに、子プロセスで参照できない」
環境変数はLinuxコマンド操作やシェルスクリプトの根幹をなす仕組みです。理解が浅いまま使うと、設定したはずの変数が効かない、パスが通らないというトラブルの原因になります。
この記事では、Linuxの環境変数を確認・設定するための
printenv・env・exportコマンドの使い分けを解説します。ローカル変数と環境変数の違い、.bashrcへの永続的な設定方法、シェルスクリプト内での活用法まで、現場で必要な知識をまとめました。
・printenv・env・exportコマンドの違いと使い分けを実務視点で解説
・exportコマンドで環境変数を設定し、子プロセスへ引き継ぐ方法
・~/.bashrc や /etc/profile.d/ を使って環境変数を永続化する手順
・PATHやPS1などよく使われる環境変数の意味と変更方法
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
環境変数とローカル変数の違い
Linuxのシェルには「環境変数」と「ローカル変数(シェル変数)」の2種類があります。この違いを理解することが、変数操作でつまずかない最初のポイントです。・ローカル変数(シェル変数):現在のシェルプロセスの中だけで有効。子プロセス(サブシェル・実行スクリプト)には引き継がれない
・環境変数:現在のシェルプロセスと、そこから起動する全ての子プロセスに引き継がれる
# ローカル変数(exportなし)の例 $ MY_VAR="hello" $ echo $MY_VAR hello # サブシェルでは参照できない $ bash -c 'echo $MY_VAR' (空白 → 引き継がれていない) # exportで環境変数にする $ export MY_VAR="hello" $ bash -c 'echo $MY_VAR' hello ← 子プロセスに引き継がれた
基本的な使い方
1. 環境変数の一覧を表示する(printenv)
printenvは環境変数のみを表示します。ローカル変数は表示されません。# 全ての環境変数を一覧表示する $ printenv HOME=/home/tanaka SHELL=/bin/bash PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin LANG=ja_JP.UTF-8 USER=tanaka LOGNAME=tanaka ... # 特定の環境変数の値だけ表示する $ printenv PATH /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin $ printenv HOME /home/tanaka
2. 環境変数の一覧を表示する(env)
envも環境変数の一覧を表示します。printenvと似ていますが、envは「一時的に環境変数を変更してコマンドを実行する」という用途にも使われます。# 全ての環境変数を一覧表示する(printenv と同じ) $ env HOME=/home/tanaka SHELL=/bin/bash PATH=/usr/local/bin:/usr/bin:/bin ... # 一時的に環境変数を変更してコマンドを実行する # この場合の環境変数は実行したコマンドにだけ有効 $ env LANG=en_US.UTF-8 date Tue Apr 7 10:30:00 UTC 2026
3. 特定の変数値を表示する(echo $VAR)
変数名の前に$ を付けると、その変数の値に展開されます。# $変数名で値を表示する $ echo $HOME /home/tanaka $ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin $ echo $LANG ja_JP.UTF-8 # 変数が存在しない場合は空白が表示される $ echo $UNDEFINED_VAR (空白)
4. 環境変数を設定する(export)
exportコマンドで変数を環境変数として設定します。設定と同時に値を指定することも、既存のローカル変数をエクスポートすることも可能です。# 変数を設定しながらエクスポートする(最も一般的) $ export MY_APP_HOME="/opt/myapp" # 既に設定済みのローカル変数をエクスポートする $ TEMP_DIR="/tmp/work" $ export TEMP_DIR # export した変数は printenv で確認できる $ printenv MY_APP_HOME /opt/myapp
5. 現在のシェルで定義された全ての変数を確認する(declare -x / set)
setコマンドはローカル変数・環境変数・関数を含む全ての変数を表示します。declare -xはエクスポートされた変数(環境変数)のみを表示します。# エクスポート済み変数のみ表示する(環境変数と同じ内容) $ declare -x declare -x HOME="/home/tanaka" declare -x LANG="ja_JP.UTF-8" declare -x PATH="/usr/local/bin:/usr/bin:/bin" ... # 全ての変数(ローカル変数含む)を表示する(量が多い) $ set | head -20
主要な環境変数の一覧と意味
| 変数名 | 意味 | 例 |
|---|---|---|
PATH |
コマンドを検索するディレクトリの一覧(:区切り) | /usr/local/bin:/usr/bin:/bin |
HOME |
ログインユーザーのホームディレクトリ | /home/tanaka |
USER |
ログイン中のユーザー名 | tanaka |
SHELL |
使用中のシェルのパス | /bin/bash |
LANG |
ロケール(言語・文字コード設定) | ja_JP.UTF-8 |
HOSTNAME |
ホスト名 | web01 |
TERM |
端末の種類(カーソル移動等に使用) | xterm-256color |
PS1 |
プロンプトの表示形式 | [\\u@\\h \\W]\\$ |
HISTSIZE |
コマンド履歴の保持件数 | 1000 |
TMPDIR |
一時ファイルの格納ディレクトリ | /tmp |
応用・実務Tips
1. PATH に新しいディレクトリを追加する
インストールしたツールのコマンドが見つからない(command not found)場合は、そのディレクトリを PATH に追加します。# 現在の PATH を確認する $ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin # PATH に /opt/myapp/bin を追加する(既存のPATHを保持しながら先頭に追加) $ export PATH="/opt/myapp/bin:$PATH" # 追加後の PATH を確認する $ echo $PATH /opt/myapp/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin # 追加したディレクトリのコマンドが実行できるか確認する $ which myapp /opt/myapp/bin/myapp
export PATH="/opt/myapp/bin" のように既存の PATH を上書きすると、基本コマンド(ls, cat等)が実行できなくなります。必ず $PATH を使って既存のパスを引き継いでください。2. 環境変数の設定を永続化する(.bashrc / .bash_profile)
exportで設定した環境変数は、シェルを閉じると消えます。ログイン後も有効にするには設定ファイルに追記します。# ~/.bashrc に追記する(インタラクティブシェル向け) $ echo 'export MY_APP_HOME="/opt/myapp"' >> ~/.bashrc $ echo 'export PATH="$MY_APP_HOME/bin:$PATH"' >> ~/.bashrc # 変更を今すぐ有効にする(ログインし直さなくてよい) $ source ~/.bashrc # または . コマンドでも同じ $ . ~/.bashrc # 確認する $ printenv MY_APP_HOME /opt/myapp
3. 全ユーザーに環境変数を設定する(/etc/profile.d/)
システム全体(全ユーザー)に適用する環境変数は、/etc/profile.d/ディレクトリに .sh ファイルを作成します。# /etc/profile.d/ に設定ファイルを作成する $ sudo vi /etc/profile.d/myapp.sh # ファイルの内容 export MY_APP_HOME="/opt/myapp" export PATH="$MY_APP_HOME/bin:$PATH" # 確認(新しいターミナルで実行) $ printenv MY_APP_HOME /opt/myapp
4. 環境変数を削除する(unset)
unsetコマンドで環境変数(またはローカル変数)を削除できます。# 環境変数を削除する $ unset MY_APP_HOME # 削除後は空白が返る $ printenv MY_APP_HOME (何も表示されない) $ echo $MY_APP_HOME (空白)
トラブルシュート・エラー対処
1. export したのに子プロセスで参照できない
スクリプトを実行する方法によっては、エクスポートした変数が引き継がれないことがあります。# . (ドット) またはsourceで実行すると現在のシェルで実行される(変数共有される) $ . ./myscript.sh $ source ./myscript.sh # bash コマンドや ./myscript.sh で実行すると子プロセスで実行される # この場合は export しないと引き継がれない $ ./myscript.sh # スクリプト内で設定した変数を現在のシェルで使いたいなら source で実行する
2. .bashrc に追記したが反映されない
.bashrc は新しいインタラクティブシェル起動時に読み込まれます。追記後は source ~/.bashrc を実行して即時反映させてください。# .bashrc の変更を現在のシェルに即時反映する $ source ~/.bashrc # 設定が反映されたか確認する $ printenv MY_VAR /opt/myapp
.bash_profileはログイン時にのみ読み込まれます。SSH接続時に環境変数を有効にしたい場合は .bash_profile に追記するか、.bash_profile から .bashrc を読み込むように設定してください。3. 「command not found」が出る(PATHの問題)
command not found エラーは多くの場合、コマンドのパスが PATH に含まれていないことが原因です。# コマンドが存在するかフルパスで確認する $ ls /usr/local/bin/mycommand /usr/local/bin/mycommand # コマンドのパスを確認する $ which mycommand /usr/local/bin/mycommand # 現在の PATH を確認する $ echo $PATH /usr/bin:/bin ← /usr/local/bin が含まれていない # /usr/local/bin を PATH に追加する $ export PATH="/usr/local/bin:$PATH" $ which mycommand /usr/local/bin/mycommand
本記事のまとめ(printenv / env / export 早見表)
| やりたいこと | コマンド |
|---|---|
| 環境変数の一覧を表示する | printenv または env |
| 特定の環境変数の値を表示する | printenv 変数名 または echo $変数名 |
| 環境変数を設定する(子プロセスに引き継ぐ) | export 変数名=値 |
| ローカル変数を確認する(全変数) | set |
| エクスポート済み変数のみ確認する | declare -x |
| PATH にディレクトリを追加する | export PATH="/新しいパス:$PATH" |
| 環境変数を削除する | unset 変数名 |
| 環境変数を永続化する(ユーザー) | ~/.bashrc に export 文を追記 |
| 環境変数を永続化する(全ユーザー) | /etc/profile.d/ に .sh ファイルを作成 |
| .bashrc の変更を即時反映する | source ~/.bashrc |
Linuxの環境変数の設定で詰まっていませんか?
環境変数の設定に限らず、Linuxサーバー構築では「設定した通りに動かない」「エラーの意味がわからない」という壁に何度もぶつかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:他のユーザにファイルを見せないようにする
- 前のページへ:ユーザーを削除する
- この記事の属するカテゴリ:Linuxtips・ユーザー管理へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます