順番に読み進めながら学べます

環境変数 — PATH と export

echo $VARやenvでの参照、HOMEとPATHの意味、exportでの設定とコマンド置換 $(...)の使い方を、ブラウザ端末で実際に操作しながら学べます。

環境変数を参照する — echo $VAR と env

環境変数は、シェルやプログラムが共有する設定値です。

名前に値を入れておき、$名前と書くとその値に置き換わります。

echo $HOMEのように頭に$を付けて参照し、envを実行すると現在設定されている環境変数の一覧が表示されます。

代表的な変数としてHOMEはホームディレクトリのパス(ここでは/root)、PATHはコマンドを探す場所をコロンで区切って並べたものです。

lsと打つだけで動くのは、lsの実体がPATHに並ぶディレクトリのどれかにあり、シェルがそこから見つけてくれるからです。

ほかにPWDは現在の作業ディレクトリ、USERはログイン中のユーザ名(ここではroot)、SHELLはログインシェルのパスを表します。

変数意味この環境での例
$HOMEホームディレクトリのパス/root
$PATHコマンドを探すディレクトリ一覧(: 区切り)/sbin:/usr/sbin:/bin:/usr/bin
$PWD現在の作業ディレクトリ/root
$USERログイン中のユーザ名root
$SHELLログインシェルのパス/bin/sh
環境変数の参照
echo $HOME/root(ホームのパス)echo $PATHコマンドを探す場所の一覧env環境変数を全部表示
$名前で 1 つの値、envで全変数の一覧を確認します。
echo $HOME      # ホームのパス(/root)
echo $PATH      # コマンド検索パスの一覧
env             # 環境変数をすべて表示

echo $HOMEを実行し、ホームディレクトリのパスが表示されることを確認してください。

echo $PATHを実行し、コマンドを探す場所がコロン区切りで並ぶことを確認してください。

envを実行し、設定されている環境変数の一覧を表示してください。(正しく実行できれば解説が表示されます)

Linux console
0 / 3 実行済み
Loading Linux Terminal...

変数を設定する — export と $(...)

名前=値で変数に値を入れ、export 名前を付けると、その変数を後で起動するプログラムにも引き継げます。

export 名前=値と 1 行で書くこともできます。

参照は$名前でもできますが、${名前}のように波かっこで囲むと変数名の区切りを明示でき、${HOME}/binのように直後に文字を続けても誤解なく展開されます。

迷ったら${名前}の形で書くのがおすすめです。

$(コマンド)はコマンド置換といい、中のコマンドを実行してその出力をその場の文字列に置き換えます。

たとえばecho $(pwd)pwdの出力(現在地のパス)をそのまま文字列として表示します。

変数の値にコマンドの結果を入れたいときに使います。

書き方意味
$VAR変数の値に置換echo $HOME
${VAR}区切りを明示した参照(推奨)echo ${HOME}/bin
VAR=値今のシェルだけに代入NAME=demo
export VAR=値子プロセスにも引き継ぐ代入export NAME=demo
$(コマンド)コマンド出力に置換echo $(pwd)
export と コマンド置換
export NAME=demoNAME を子プロセスにも渡すecho $NAMEdemo と表示echo $(pwd)pwd の出力に置き換わる
exportで値を引き継ぎ、$(...)でコマンドの出力を埋め込みます。
export GREETING=hello   # 変数を設定して引き継ぐ
echo $GREETING          # hello
echo "today is $(date)" # $(...) でコマンドの出力を埋め込む

export NAME=demoで環境変数を設定してください。

echo $NAMEを実行し、設定した値demoが表示されることを確認してください。

echo $(pwd)を実行し、$(...)の中のpwdの出力がそのまま文字列として表示されることを確認してください。

Linux console
0 / 3 実行済み
Loading Linux Terminal...

PATH の仕組み — コマンドが見つかる流れ

PATHは、コマンドを探すディレクトリをコロン:で区切って並べた環境変数です。

lscatのようにパスを書かず名前だけでコマンドを打つと、シェルはPATHに並ぶディレクトリを左から順に見て、最初に見つかった実体を実行します。

だから/bin/lsとフルパスで書かなくても、lsだけで動きます。

逆に、PATHのどのディレクトリにも無いコマンドはnot foundになります。

自作のスクリプトを名前だけで呼び出したいときは、その置き場所をPATHに足す必要があり、次にその書き方を見ます。

コマンドが PATH から見つかる流れ
ls と入力PATH を左から探索最初の一致で停止/sbinls は無い次の場所へ/usr/sbinls は無い次の場所へ/binls が有る/bin/ls を実行/usr/binここまで来ない探索は終了
PATH/sbin:/usr/sbin:/bin:/usr/binのとき、lsは左の/sbinから順に探され、/binで見つかってそこで停止します。後ろの/usr/binまでは探しに行きません。

PATH に追加する書き方

自作のコマンドを名前だけで実行したいときは、その置き場所をPATHに足します。

書き方はexport PATH=${PATH}:/new/dirで、今のPATHの末尾にコロンと新しいディレクトリをつなげます。

${PATH}を含めるのは、既存の検索場所を消さずに追加するためです。

① まずecho ${PATH}で現在の検索パスを表示してください。

export PATH=${PATH}:/opt/binを実行し、末尾に置き場所を 1 つ足してください。

③ もう一度echo ${PATH}を実行し、末尾に/opt/binが追加されたことを確認してください。

Linux console
0 / 3 実行済み
Loading Linux Terminal...
QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1echo $HOMEは何を表示しますか?

Q2PATHの役割として正しいものはどれですか?

Q3echo $(pwd)を実行すると何が表示されますか?