お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-01-20 14:19:25

linuxman
新しいメンバ
登録日: 2010-01-19

シェル変数と環境変数の違い(見分け方)

ubuntu9.10を使用しております。

よく書籍やHPでは、
PS1、HISTSIZE、PATHは環境変数と書かれています。
しかし以下のコマンドすると・・・

$ env | grep PS1
$ env | grep HISTSIZE

何も表示されません。

$ echo $HISTSIZE
500

と結果になり、
$ HISTSIZE=300
$ echo $HISTSIZE
300

シェル変数のようにも感じます。

PATH変数もエクスポートせず、
PATH=$PATH:/dir1 等でパスをとおすことが
できるので、そこが不明です。

ここらへんが整理できておりませんので、
少し説明していたきますと助かります。

ご教授お願い致します。

オフライン

 

#2 2010-01-20 15:15:48

weyk
メンバ
登録日: 2009-04-03

Re: シェル変数と環境変数の違い(見分け方)

 大抵の場合にあいまいに扱われていること(今回で言うと、変数、シェル変数、環境変数)について、厳密に考えようとする場合、「オフィシャルな文書以外の大半は間違えているかもしれない」という前提で調べることになります(それでも意味は通じますし、十分に役に立ちます)
# 簡単に解説するために、あえて一般的によく間違えられた用法を使う(そこに、ただし・・とか、正確には・・とか書くと、入門者にはそれが妨げになってしまう) ということもありますし。

 そこで、本来は、おそらく、gnu bash のmanpageの原文を調べるのが良いんですが・・・sh系の長いマニュアルを英語で読むのは(私には)ちょっと大変そうなので、以下のサイトに掲載のものを参照しています(しっかり訳されているようなので、たぶん、大丈夫。訳語の割当がちょっと違うだけでも、意味が異なってしまうので、本来に原書にあたって対応する単語と、それがキーワードとして扱われているかどうか(イタリックになっている とか) で判断するべきです。念のため。)

http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html

ここの、「パラメータ」付近、「シェル変数」と、「コマンドの実行」「コマンド実行環境」「環境」あたりを読みつつ、関連する内部コマンドの説明を読むのが良いのではないか と思います。
# PATHをexportする必要がある・・・というのは、bash自分自身が実行している分には関係しない気がします。(そこから、プロセスを起動するなら関係してきますが・・・)

なお、これは、bash(sh系)の場合です。csh系では、変数と環境変数が区別されて管理されているようなので、話しが全く違う という可能性があります。そのため、見かけたサイトや記事などが、どちらの話しをしているのか という点も注意する必要がある・・・ということになります。
# どっちのほうが人気があるのかは不明。基本はsh(と、実体として使われることの多いbash。内部コマンドとしてのスクリプトはsh前提?)だと思うのですが、人間が使うにはtcshの方が便利でttyにはtcshが多いという話しも。

オフライン

 

#3 2010-01-20 21:51:00

hir0
メンバ
登録日: 2008-09-28

Re: シェル変数と環境変数の違い(見分け方)

コード:

    [シェル変数]                        [環境変数]
         |                                 |
   [ローカル変数] --------|           [グローバル変数]
         |               |                 |   
   [組み込み変数]    [定義出来る]           
         |                                 |
         |               |                 |
[予め用意されている]      
         |               |                 |
        [exportで環境変数に]---
                |            |             |
        [export=で値も変更可]--|             |
                     |----[子プロセスから参照出来る]

・$ env | grep PS1 が表示されないならば、 $ set | grep PS1 としてみて下さい。

 う~ん、私は余り必要としないので深く意識したことは無いですがシェル変数と環境変数の捉え方での違いで話が足踏みしているのかも。
この辺りは私も解らないのでこの機会に知っておきたい所ですね(ヒントだけでも)

ちなみにlinuxmanさんはどう言うものをシェル変数、環境変数と捉えているのでしょう。

オフライン

 

#4 2010-01-21 16:49:01

linuxman
新しいメンバ
登録日: 2010-01-19

Re: シェル変数と環境変数の違い(見分け方)

weykさん、hir0さん

レスありがとうございます。
いまさらですが、シェルはbashということでお願いします。

>・$ env | grep PS1 が表示されないならば、 $ set | grep PS1 としてみて下さい。
setで実行すれば、表示されますね。
envで表示されなくて、setで表示されるので、シェル変数なのかと思いました。

$export PS1
とすれば、環境変数として$env | grep PS1で値が表示されます。

ただ、HPや書籍を見ると、はじめから環境変数と説明されていて、混乱しております。


>ちなみにlinuxmanさんはどう言うものをシェル変数、環境変数と捉えているのでしょう。

以下のように捉えております。
【シェル変数】
・現在実行中のシェル上で参照可能な変数。
・現在実行中のシェルで設定された変数は、現在実行中のシェルから起動されたシェル(子プロセス)に
値が引き継がれない。
・シェルに組み込まれているコマンドからは参照可能。

【環境変数】
・現在実行中のシェル、実行中のシェルから起動されたシェル(子プロセス)でも値を参照可能な変数。
・シェルに組み込まれていないコマンドから参照可能。

オフライン

 

Board footer

Powered by FluxBB