3.環境変数とシェル変数?

1.環境変数とシェル変数の違い

Linux変数には有効範囲が、その変数を定義したシェルのみとなるシェル変数と、データや設定情報を保持するための変数でシステム全体でアクセス可能(コマンドや別シェルからも参照可能)となる環境変数があります。

シェル変数の指定方法

シェル変数は「date=20231017」という形で変数を指定してあげれば、下図のように「echo $date」することで20231017という文字列が出力されることがわかりますね。

test@test1:~ $ date=20231017
test@test1:~ $ echo $date
20231017
test@test1:~ $

但し、シェル変数の適応スコープはそのシェル内(ログインシェル)のみで、別のシェルからの参照はできないので、他のシェルからも参照できるようにする為に、環境変数というものがあります。

1.主な環境変数(これだけ覚えればOK)

環境変数説明
PATHコマンド・プログラムを検索するディレクトリのリスト
PWDカレントディレクトリ
HOSTNAMEホスト名
USER現在ログイン中のユーザ
LANG言語
HOME現在ログイン中のホームディレクトリ
LONNAMEログインシェルのユーザー名
PS1コマンドプロンプトの表示文字列
PS2コマンドプロンプトの複数行にわたる入力
HISSIZEコマンド履歴の最大値
HISFILEコマンド履歴格納先
TERM端末種類

2.環境変数の指定方法

環境変数を指定すれば、すべてのシェルから変数を参照できます。

●一時的に環境変数を変更する場合(セッション内のみ有効)

exportコマンドを使い、例えばDATEという環境変数を作り、20231018という値をいれた変数を作りたい場合には「export DATE=20231018」とコマンド発行すれば、環境変数を設定することができます。(基本的に環境変数は大文字が一般的です)

但し、exportコマンドはセッション内のみで、ログアウトをすると消えます。

●永続的に環境変数を変更する場合

Linuxシステムは、以下①~③の順番で設定ファイルを読み込み、パスを読み込むので、どの設定ファイルに設定した場合でも永続的に環境変数を変更することができます。但し、①のようにシステム全体に影響する設定方法もある為、どういう範囲で変数が必要なのか考えて設定してみてください。

①「/etc/profile」を編集する。

Linuxシステムで使用されるシステム全体のプロファイル設定ファイルの1つです。

このファイルは、システムのすべてのユーザーに対して共通の環境変数や設定を定義するために使用される為、誤った設定はシステム全体に影響を与える可能性があるため、慎重に行う必要がありますので、通常、利用者(ユーザ)が編集することはありません。

②「/home/ユーザー名/.bash_profile」を編集する。

ログインシェルの設定: .bash_profileは、ユーザーがシステムにログインした際に最初に読み込まれるファイルです。

通常、環境変数の設定、シェルのプロンプト設定、パスの追加などが含まれていますが、個別シェルで環境変数を設定したい場合は、bash_profileファイル内で.bashrcファイルを読み込むことが一般的です。これで.bashrcに格納されたカスタム設定やエイリアスがログインシェルに反映されます。

③「/home/ユーザー名/.bashrc」を編集する。

管理者権限で編集することができ、ユーザーごとに異なるエイリアスの設定(例えば、alias ll=’ls -alF’というエイリアスを設定すると、llと入力するだけでls -alFと同じ効果が得られます。

他にも、PS1環境変数を変更して、Bashのプロンプトの表示をカスタマイズできたり色んな事ができるのですが、とりあえず、永続的に何かしらのパス等を作りたいなら②③の方法どちらも効果は同じです。(厳密には起動順序等あるのですが、そこは設定しながら覚えればOK)

●環境変数の確認方法
envコマンド

envと打つだけで、現在のシェル環境で定義されているすべての環境変数の詳細一覧を表示されます。

printenvコマンド

指定した環境変数の値だけを表示したいときに使用。例えば「printenv PATH」というように使用。値は改行無しになります。

これで、シェル変数と環境変数の違い(初心者としては)OK