Linuxで環境変数を確認するには、printenv コマンドが最も手軽です。すべての環境変数を一覧表示したり、変数名を指定して特定の値だけを確認したりできます。この記事では printenv の基本構文・オプション・実行例に加えて、echo $VAR や env との違い、確認時によくあるつまずきをまとめます。
環境変数の設定(export)や ~/.bashrc への永続化まで含めて知りたい場合は、Linux 環境変数の確認・設定コマンド|printenv / export / env の使い分けと永続設定もあわせて参考にしてください。
printenvとは?環境変数を確認する基本コマンド
printenv は、シェルに設定されている環境変数をそのまま表示するコマンドです。プログラムの動作確認や、PATH・LANG などの環境設定が正しく反映されているかを確認するときに使います。引数なしで実行すればすべての環境変数を一覧表示し、変数名を指定すればその値だけをピンポイントで確認できます。
似たコマンドに echo $変数名 がありますが、決定的な違いがあります。echo は export されていないシェル変数 も表示できるのに対し、printenv は 環境変数(export済みの変数)しか表示できません。「echoでは表示されるのにprintenvでは何も表示されない」という場合は、その変数がまだexportされていないことが原因です。
構文(Syntax)
printenv [変数名 ...]
変数名は複数指定でき、指定した順番どおりに1行ずつ値が出力されます。
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
| (なし) | すべての環境変数を一覧表示 | printenv |
変数名 | 特定の環境変数を表示 | printenv PATH |
変数名 変数名 | 複数の環境変数をまとめて表示 | printenv HOME LANG |
-0 | 出力を改行ではなく NUL 文字で区切る | printenv -0 |
環境変数を確認する実行例
すべての環境変数を確認する
引数を付けずに実行すると、現在のシェルに設定されている環境変数がすべて表示されます。
printenv
出力例:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
HOME=/home/user
LANG=en_US.UTF-8
特定の環境変数だけを確認する
PATH や LANG が正しく設定されているかをピンポイントで確認したいときは、変数名を指定します。
printenv PATH
出力例:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
複数の環境変数をまとめて確認する
変数名をスペース区切りで複数指定すると、指定した順に1行ずつ値が出力されます。
printenv HOME LANG
/home/user
en_US.UTF-8
grepと組み合わせて絞り込む
変数名の一部しか覚えていない場合や、特定のキーワードを含む環境変数をまとめて確認したい場合は grep と組み合わせます。
printenv | grep -i lang
LANG=en_US.UTF-8
出力を NUL 区切りにする
環境変数の値に改行が含まれる場合、通常の改行区切りでは正しく1件ずつ処理できません。-0 オプションを使うと、値の区切りを NUL 文字にできるため、スクリプトで安全にパースできます。
printenv -0
存在しない変数を確認した場合
指定した変数が存在しない場合、エラーメッセージは表示されず何も出力されません。ただし終了コードは 1(非ゼロ) になるため、シェルスクリプトでは終了コードを見て存在チェックができます。
printenv NOTFOUND
echo "終了コード: $?"
(何も表示されない)
終了コード: 1
よくある質問
printenvで環境変数が表示されないときは?
変数名のスペルミスがないか確認してください。それでも表示されない場合、その変数はシェル変数のまま export されていない可能性があります。export 変数名 を実行してから、再度 printenv で確認してください。
printenvとenvの違いは?
どちらも環境変数を一覧表示できる点は同じです。env は環境変数の表示に加えて、変数を一時的に上書きした状態で別のコマンドを実行する機能を持ちます。単に確認したいだけなら printenv、確認と一時的な変更・実行を同時に行いたいなら env を使うとよいでしょう。詳しくはenvコマンドの使い方を参照してください。
printenvとechoの違いは?
echo $変数名 はシェル変数・環境変数を問わず値を表示できます。一方 printenv 変数名 は環境変数(export済みの変数)しか表示できません。exportしていない変数を確認したいときは echo を、環境変数として正しく子プロセスに引き継がれるか確認したいときは printenv を使い分けます。
特定の環境変数だけを一覧から探すには?
変数名を正確に覚えていない場合は printenv | grep キーワード のように grep と組み合わせると、部分一致で候補を絞り込めます。
関連コマンド
env: 環境変数を表示・設定してコマンドを実行する。環境変数の一時指定やクリーンな環境での実行も可能。- export : 環境変数を新たに定義・設定する。printenvとセットで「設定→確認」の流れを覚えると効率的です。
unset: 不要になったシェル変数や環境変数を削除する。set: シェル変数と関数を含めた一覧を表示する。
備考
- 引数を指定しない場合、すべての環境変数が表示されます。
- 存在しない変数を指定した場合は何も出力されませんが、終了コードは 非ゼロ(1) になります。
- export されていないシェル変数は表示されません。表示するには先に
exportが必要です。 - POSIXに準拠した基本的なコマンドで、ほとんどのLinux/Unix環境で利用可能です。
参考
- manページ: https://man7.org/linux/man-pages/man1/printenv.1.html
- GNU Coreutils公式: https://www.gnu.org/software/coreutils/

コメント