[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

シェル変数

pointこの用語のポイント

pointシェルが持っている変数だよ

pointシェルスクリプトで使う変数だよ

スポンサーリンク

簡単に書くよ

シェル変数とは

シェルが持っている、値を入れておく箱(変数)
であり

シェルが動いているときに使える変数
です。

image piyo

詳しく書くよ

順番に見ていきましょう。
まずは予備知識として「シェル」と「シェルスクリプト」あとは「変数」について説明します。

シェルは「人間様からの入力をコンピュータさんに伝えるプログラム」です。

シェル変数

コンピュータを1つの会社に例えれば、シェルは受付のおねーさんです。

シェル変数2

ついでなので書いておくと、コンピュータを使う人間が会社への訪問者、パソコンの中身が会社で働いている人に相当します。

シェル変数3

あなたがパソコンの中身と直接やり取りをすることはありません。
あなたがやり取りする相手は、シェルです。
シェルがあなたの代わりに、パソコンの中身とやり取りしてくれます。

シェル変数4

ここでは

人間様はシェルに対して命令し、シェルがコンピュータさんに対して指示を出す

というのを覚えておいてください。

シェル変数5

シェルスクリプトは「シェルで解釈できる命令を寄せ集めて作ったプログラム」です。
シェルに対する「パン買ってこい」や「肩を揉め」といった命令を書いたファイルです。
このファイルをシェルに渡すと、パンを買ってきて肩を揉んでくれます。
よく分からない人は「コンピュータさんに対する命令が書いてあるファイル」程度の理解でも、かまいません。

シェル変数6

変数は「プログラミング言語における『値を入れておく箱』」です。
今回はプログラミング言語うんぬんは気にしないでください。
とにかく「値を入れておく箱」です。

シェル変数7

以上を踏まえて、シェルの持ち物で、シェルが動いているときに使える変数が「シェル変数」です。

シェル変数8

「シェルが動いているときに使える」というのは、例えばシェルスクリプトから変数の中身を見たりです。

シェルが持っているシェル変数は1つではありません。
いろいろな名前の箱を、たくさん持っています。

シェル変数9

私の環境(CentOS)を例に説明しますが

set

入力すると、以下のような内容が表示されます。
※内容は適当に端折っています。

argv  ()
consoletype   pty
csubstnonl
cwd   /piyota
dirstack    /piyota
echo_style   both
edit
gid   0
group piyota
history 1000
home  /piyota
killring    30
loginsh
owd
prompt [%n@%m %c]#
prompt2 %R?
promptchars   $#
shell /bin/tcsh
shlvl 1
sourced 1
status 0
tty   pts/0


例えば

home  /piyota

という行に注目してください。

これは「home」という箱に「/piyota」という値が入っていることを意味します。

シェル変数10

この状態で

echo $home

を実行すると

/piyota

と表示されます。

echo」は「画面に表示してね」な指示です。
箱の中身を見るときは、頭に「$」を付けます。
「$home」は「箱『home』の中身」を意味します。

よって、箱「home」の中身である「/piyota」が表示されたわけです。

なお、シェルスクリプト内で扱う変数は、基本的にシェル変数です。
シェルスクリプト内で「あー、この値をどこかに取っておきたいな」と思ったときは、シェルに対して「おい、ちょっと、こいつを覚えておいてよ」とお願いします。

シェル変数11

以上でシェル変数自体の説明は終わりですが、せっかくなので環境変数との違いを説明しておきましょう。

環境変数は「コンピュータさんが持っている変数」です。
言い換えると、コンピュータ(正確にはOS)が動いているときに使える変数です。

シェル変数12

シェル変数と環境変数では持ち主が違います。
シェル変数がシェルの持ち物なのに対し、環境変数はコンピュータさんの持ち物です。

シェル変数13

「だから、どーした?ここまで読んでやったんだから、そんなの分かってるよ。てか、おまえ、毎回説明がくどすぎるぞ、ばーか、ばーか」と思いましたか?

実は、これが意外と大事なのです。

例えば、そうですね。
シェルスクリプト「ピヨ太.sh」から「ピヨ子.sh」を呼び出しているとしましょう。

シェル変数14

シェルスクリプトは、シェルに対する命令が書いてあるファイルでした。
「ピヨ太.sh」に書かれている内容と「ピヨ子.sh」に書かれている内容は、シェルによって実行されます。

シェル変数15

ただし「ピヨ太.sh」に書かれている内容をやるシェルと「ピヨ子.sh」に書かれている内容をやるシェルは別のシェルです。

シェル変数16

「『ピヨ太.sh』に書かれている内容をやるシェル」と呼び続けるのも大変なので「ピヨ太シェル」と呼ぶことにします。
「ピヨ子.sh」に書かれている内容をやるシェルは「ピヨ子シェル」です。

それを踏まえて「ピヨ太.sh」の中でシェル変数「oyatu」に「バナナ」を設定したとしましょう。
このとき、ピヨ太シェルは箱「oyatu」を作って、中に「バナナ」を入れます。

シェル変数17

このシェル変数「oyatu」の中身を「ピヨ子.sh」から覗いても、中身は空っぽです。
なぜなら、箱「oyatu」を持っているのはピヨ太シェルだからです。
ピヨ子シェルは箱「oyatu」を持っていません。

シェル変数18

ちょっと小難しい言い方をすると「ピヨ太.sh」で設定したシェル変数の値は「ピヨ太.sh」から呼び出した「ピヨ子.sh」では参照できないのです。

それでは、環境変数を使うと、どうなるでしょう。
同じ処理を、シェル変数ではなく環境変数を使って、やってみます。

「ピヨ太.sh」の中で環境変数「oyatu」に「バナナ」を設定しました。
ピヨ太シェルは、コンピュータさんに箱「oyatu」を作ってもらって、その中に「バナナ」を入れます。

シェル変数19

この環境変数「oyatu」の中身を「ピヨ子.sh」から覗いたら……中には「バナナ」が入っています。
なぜなら、箱「oyatu」を持っているのはコンピュータさんだからです。
コンピュータさんの持っている箱はピヨ子シェルからも覗けます。

シェル変数20

ちょっと小難しい言い方をすると「ピヨ太.sh」で設定した環境変数の値は「ピヨ太.sh」から呼び出した「ピヨ子.sh」でも参照できるのです。

これがシェル変数と環境変数の違いです。
シェル変数に設定した値が同一シェル内でしか参照できないのに対し、環境変数に設定した値はシェルをまたいで参照できます。

あっ、そうそう。
ひとつ注意点がありました。

「ピヨ太.sh」で設定した環境変数の値は「ピヨ太.sh」が終了すると捨てられちゃいます。
コンピュータさんが「もう、これを使うやつはいないのか。持っていても仕方ないから捨ててしまおう」と考えるのです。

環境変数に設定した値を他の関係ないプログラムでも使いたい場合は「ずっと残しておいてね」なやり方で環境変数を設定する必要があります。
具体的なやり方は、他のところで勉強してください。
「Linux 環境変数 永続化」あたりをキーワードにしてGoogleYahoo!などで検索すれば、いろいろな情報が見つかると思います。

image piyo2

一言でまとめるよ

まぁ「シェル変数」って単語が出てきたら「シェルが持っている変数なんだな~」と、お考えください。

一番上に戻るよ
スポンサーリンク