新Linux入門|シェル変数を理解しよう!設定・参照・削除の基本

Linuxで作業をしていると、「変数」という言葉をよく見かけます。
変数は、ちょっとした値(文字列やパスなど)を一時的に記憶しておくための便利な仕組みです。
 たとえば、ユーザー名やホームディレクトリのパスなどをシェルが自動で保持しているのも、シェル変数の働きなんです。

この記事では、シェル変数の設定・参照・削除の基本をわかりやすく解説します。

🧩 シェル変数とは?

シェル変数とは、シェルが内部的に使用する情報を格納するための変数です。
ユーザーが手動で作成することもでき、
設定した変数の値はシェルを閉じるまで有効です。

シェル変数には、あらかじめシステムによって設定されているもの(組み込み変数)もあり、
ユーザーやシステムの環境情報を保持しています。

変数名内容・説明
HOMEホームディレクトリのパス(例:/home/suzuki)
USER / LOGNAME現在ログイン中のユーザー名
PATHコマンド検索パス(コマンドを探す場所の一覧)
SHELL使用中のシェルのパス(例:/bin/bash)
PWD現在の作業ディレクトリのパス
PS1 / PS2プロンプトの表示形式を設定
LANG / LC_*言語・ロケール設定
UID現在のユーザーID

💬 ポイント
これらはシェル自身が利用する基本的な変数で、
Linuxの操作やスクリプト実行に欠かせない情報を保持しています。

🛠️ シェル変数の設定方法

シェル変数は、「変数名=値」 の形式で設定します。
このとき、「=」の前後にスペースを入れないのが大切なルールです。

📘 例

[suzuki@AlmaLinux ~]$ MY_VARIABLE="Hello, World"
[suzuki@AlmaLinux ~]$ echo $MY_VARIABLE
Hello, World

💬 echo コマンドを使って $ を付けると、
変数の値を出力することができます。

🧠 変数名は大文字・小文字を区別する

Linuxのシェルでは、変数名の大文字と小文字が別の変数として扱われます
同じ名前でも大文字と小文字を変えただけで、異なる変数を同時に保持できます。

📘 例

[suzuki@AlmaLinux ~]$ my_variable="Lowercase"
[suzuki@AlmaLinux ~]$ MY_VARIABLE="Uppercase"
[suzuki@AlmaLinux ~]$ echo $my_variable
Lowercase
[suzuki@AlmaLinux ~]$ echo $MY_VARIABLE
Uppercase

💬 スクリプトや設定ファイルでは、一般的に大文字の変数名を使うことが多いです。

🔍 特殊なシェル変数

シェルには、あらかじめ定義されている特殊変数があります。
これらはスクリプトの実行やコマンドの状態を確認する際に便利です。

特殊変数説明
$0実行中のスクリプト名を示す
$#スクリプトに渡された引数の数
$1, $2, …スクリプトに渡された引数
$?直前のコマンドの終了ステータス(0=成功、1以上=失敗)

📘 例

[suzuki@AlmaLinux ~]$ ls /etc > /dev/null
[suzuki@AlmaLinux ~]$ echo $?
0
[suzuki@AlmaLinux ~]$ ls /no/such/file > /dev/null
[suzuki@AlmaLinux ~]$ echo $?
2

💬 $? は「直前のコマンドが成功したかどうか」を確認するときによく使われます。

🧭 シェル変数と環境変数の違い

種類有効範囲設定方法子プロセスへの引き継ぎ
シェル変数現在のシェルのみ有効変数名=値引き継がれない
環境変数子プロセスにも引き継がれるexport 変数名=値引き継がれる

📘 例

[suzuki@AlmaLinux ~]$ var="local"
[suzuki@AlmaLinux ~]$ export global_var="environment"
[suzuki@AlmaLinux ~]$ bash
[suzuki@AlmaLinux ~]$ echo $var
                 # シェル変数は引き継がれない
[suzuki@AlmaLinux ~]$ echo $global_var
environment      # 環境変数は引き継がれる

💬 このように、export コマンドで設定した変数だけが子シェルにも引き継がれます。

🧹 変数の削除

不要になった変数は、unset コマンドで削除することができます。

📘 コマンド書式

unset 変数名

📘 例

[suzuki@AlmaLinux ~]$ MY_VARIABLE="Hello"
[suzuki@AlmaLinux ~]$ unset MY_VARIABLE
[suzuki@AlmaLinux ~]$ echo $MY_VARIABLE
                    # ← 何も表示されない

💬 unset を使うと変数がメモリ上から削除され、参照しても空になります。

🔁 変数の再代入と上書き

同じ変数名に新しい値を設定すると、既存の値が上書きされます。

📘 例

[suzuki@AlmaLinux ~]$ MY_VARIABLE="Old"
[suzuki@AlmaLinux ~]$ MY_VARIABLE="New"
[suzuki@AlmaLinux ~]$ echo $MY_VARIABLE
New

💬 再代入は簡単にできるため、スクリプトでは値を変更する場面でもよく使われます。

📦 変数の有効範囲(スコープ)

変数は、設定されたシェル内でのみ有効です。
サブシェルを起動すると、新しいシェル環境が作られるため、元の変数は引き継がれません。

📘 例

[suzuki@AlmaLinux ~]$ var=infra-linux
[suzuki@AlmaLinux ~]$ echo $var
infra-linux
[suzuki@AlmaLinux ~]$ bash
[suzuki@AlmaLinux ~]$ echo $var
                    # 何も表示されない
[suzuki@AlmaLinux ~]$ exit
exit
[suzuki@AlmaLinux ~]$ echo $var
infra-linux

💬 このように、変数はそのシェルを抜けると消えます。
環境変数にしたい場合は、export コマンドで明示的に指定しましょう。

✅ まとめ

  • シェル変数は、シェル内で値を一時的に保持するための変数。
  • 設定は「変数名=値」、参照は「$変数名」、削除は「unset 変数名」。
  • 大文字・小文字は区別される。
  • export すれば環境変数として子シェルにも引き継げる。

💬 シェル変数の使い方を理解しておくと、スクリプト作成や環境設定がグッと楽になります。
次回は、これをさらに発展させて「環境変数との関係」も見ていきましょう!