Chapter 11

シェル変数・環境変数

おでん
おでん
2021.07.27に更新

変数

変数とは、ユーザごとに任意の値を入れられる箱のようなものです。

値とは、処理対象のデータです。

シェル変数

シェル変数は、シェルが管理する変数です。
シェル変数を作成したプロセスだけが参照可能です。(1368bashで作成したシェル変数は1984bashでは、参照不可)
シェル変数を作成したプロセスが終了した時点で、そのプロセス上のシェル変数は消滅します。

環境変数

環境変数は、全プロセスで参照できる変数です。

set

ユーザごとに設定されている変数を一覧で出力する。

$ set

env

ユーザごとの環境変数を一覧で出力する。

$ env

変数名=値

以下の書式をプロンプト上で実行することで、シェル変数が新規作成される。

$ 変数名=値

(例)
$ TEST=1

また、既に存在する変数名であれば、値を更新する。

$ TEST=1
$ TEST=2    #TEST変数の値を1から2に更新

export (オプション) (引数)

環境変数を新規作成したり、シェル変数と環境変数を変換する。
主なオプションは以下。

オプション名 機能
-n 環境変数をシェル変数に変換する
$ export TEST=1   #環境変数を新規作成
$ export TEST   #シェル変数を環境変数に変換
$ export -n TEST   #環境変数をシェル変数に変換

unset (引数)

引数変数を削除する。

$ unset TEST

$変数名

以下の書式をプロンプト上で入力することで、変数名を変数と認識される。

$変数名

echo (引数)

引数の値や文字列を標準出力する。
上記の変数の値の確認などで使用される。

$ echo TEST
TEST

$ echo $TEST    #TEST変数と認識される
1

文字列の連結

文字列の連結は、以下のような書式で、値を連続で記述します。

値値
例1
$ TEST=1

$ echo TEST$TEST
TEST1

上記の例1の場合、「TEST$TEST」を出力しています。
「TEST」は通常の文字列で、「$TEST」は$がついているため変数とみなされます。
よって、最初の「TEST」はそのまま、後の「$TEST」は代入されている「1」が表示されます。

例2
$ TEST=1

$ echo $TEST'TEST'
1TEST

上記の例2の場合、「$TEST」は変数として、「'TEST'」は文字列としてみなされて連結出力しています。
後ろの「TEST」をクォーテーションで囲まないと、「$TESTTEST」という1つの変数としてみなされてしまうため、必要となります。

PATH

PATHとは、ディレクトリパスが格納されている環境変数です。
実行対象のファイルパスをOSが自動補完してくれます。
そのため、ユーザはファイルパスを省略して実行することができます。
なんの事かと言うと、これまで使用してきたコマンドというものはファイルが実行されていたのです。
例えば、「pwd」や「cd」というコマンドは「pwdファイル」や「cdファイル」を実行しているということです。
では、そのようなファイルはどこに存在するのでしょうか。
「PATH」という環境変数を探してみます。

$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ユーザ名/.local/bin:/home/ユーザ名/bin

(出力結果はユーザによって異なります。)
主に「/usr/bin」配下にあることがわかります。
ここで、Linuxの主なディレクトリとその使用用途を挙げます。

ディレクトリ名 使用用途
bin 基本コマンド
boot OS起動
dev デバイス関連
etc 各種設定
home ホームディレクトリ
lib 共通ライブラリ
mnt マウントポイント
opt 追加ソフトウェア
proc プロセス情報
root rootユーザのホームディレクトリ
sbin システム関連コマンド
tmp 一時的なファイル
usr 各種プログラム
var よく更新されるファイル

また、whichコマンドで、コマンドのパスを確認することができます。

which (引数)

引数のコマンドを絶対パスで表示する。
存在しないコマンドを引数に指定した場合、以下のようなエラーメッセージが出力される。

no 入力コマンド名 in (PATH環境変数の値)
$ which コマンド名

ファイル名だけで実行する方法

ファイル名だけで実行する方法は主に以下の2つです。

  1. PATH環境変数があるディレクトリ配下にファイルを配置する
  2. 既存のPATH環境変数の値と、ファイル格納されているディレクトリを文字列連結し、PATH環境変数を更新する

1は、シンプルにPATH環境変数があるディレクトリ配下にファイルを配置します。
2は、以下のように記述することで値を連結します。

PATH=$PATH:ファイルパス

alias (引数)

エイリアスを作成、更新、確認する。
引数を省略すると、登録されている全てのエイリアスが表示される。
以下のように引数を指定すると、エイリアスが新規作成される。

alias エイリアス名='コマンド名'
$ alias psa='ps -ef'

また、以下のように引数を指定すると、該当するエイリアス名・登録された値が出力される。

$ alias エイリアス名
$ alias psa

unalias (引数)

引数エイリアスを削除する。

$ unalias エイリアス名

変数やエイリアスの設定ファイル

変数やエイリアスは基本的に永続化ができません。
これは、シェルのプロセスが変数やエイリアスを保持しているので、プロセス終了と同時に消滅してしまう為です。
そこで、変数やエイリアスを永続化するためには、ログインユーザが読み込む設定ファイルに変数やエイリアスを記述する必要があります。
ログインユーザが読み込む設定ファイルには、以下があります。

設定ファイル 説明
/etc/profile 全ユーザで設定。
/etc/profile.d/*.sh 全ユーザで設定。profile配下のファイル群。
~/.bash_profile ユーザごとで設定。主に環境変数・ログイン時動作を設定。
~/.bashrc ユーザごとで設定。主にエイリアスを設定。