Q1echo $HOMEは何を表示しますか?
環境変数 — 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 |
$名前で 1 つの値、envで全変数の一覧を確認します。echo $HOME # ホームのパス(/root)
echo $PATH # コマンド検索パスの一覧
env # 環境変数をすべて表示
変数を設定する — 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 GREETING=hello # 変数を設定して引き継ぐ
echo $GREETING # hello
echo "today is $(date)" # $(...) でコマンドの出力を埋め込む
PATH の仕組み — コマンドが見つかる流れ
PATHは、コマンドを探すディレクトリをコロン:で区切って並べた環境変数です。
lsやcatのようにパスを書かず名前だけでコマンドを打つと、シェルはPATHに並ぶディレクトリを左から順に見て、最初に見つかった実体を実行します。
だから/bin/lsとフルパスで書かなくても、lsだけで動きます。
逆に、PATHのどのディレクトリにも無いコマンドはnot foundになります。
自作のスクリプトを名前だけで呼び出したいときは、その置き場所をPATHに足す必要があり、次にその書き方を見ます。
PATHが/sbin:/usr/sbin:/bin:/usr/binのとき、lsは左の/sbinから順に探され、/binで見つかってそこで停止します。後ろの/usr/binまでは探しに行きません。PATH に追加する書き方
自作のコマンドを名前だけで実行したいときは、その置き場所をPATHに足します。
書き方はexport PATH=${PATH}:/new/dirで、今のPATHの末尾にコロンと新しいディレクトリをつなげます。
${PATH}を含めるのは、既存の検索場所を消さずに追加するためです。
理解度チェック
まずは1問ずつ答えてみましょう。
Q2PATHの役割として正しいものはどれですか?
Q3echo $(pwd)を実行すると何が表示されますか?