回答:
$BASH
あるローカル変数の現在の(bashの)でのみ有効ですシェル。
などの環境変数$SHELL
は、システム全体で有効です。現在のBashシェルでは、$BASH
の実行パスを指すbashのに対し、$SHELL
(同じ値であってもよい)は、デフォルトとして定義シェルを指します。
環境変数の説明については参照環境変数 Ubuntuのヘルプを。
環境変数は、プログラムおよびその子プログラムでグローバルに利用可能です。シェル変数は、現在のシェルでのみ使用可能です。シェル変数を環境変数として使用可能にするには、export VARNAME
(ドルなしで$
)を使用します。
明確化の例:
$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR
環境変数を定義する別の方法:
$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE
export
必ずしも環境変数を設定するとは限りません。stackoverflow.com/questions/7411455/...
export
は、子プロセスの環境変数を設定します。リンクした投稿はこの答えと矛盾していませんが、なぜ間違っていると思うのかを明確にできますか?
export
環境変数を絶対に設定します
違いがあります。シェル変数と環境変数は、私ができることをよりよく説明しますが、ここからの抜粋です:
シェル変数に変更が加えられた場合、フォークされたサブプロセスが変更を確認できるように、対応する環境変数に明示的に「エクスポート」する必要があります。シェル変数は、それらが定義されたシェルに対してローカルであることを思い出してください。
この質問に答えるには、まず変数のスコープを理解してください。
同様に新しい変数を作成するとSOME_ENV_VARIABLE="testing.txt"
、それが中に存在するSHELL scope
、すなわち、によってアクセスされることを意味するシェルのインスタンスユーザがログインしている。例えば、インスタンスの変更は、新しい端末を開いたり、あなたが(たとえばシェルを変更しますに切り替えcsh
ます)その変数にアクセスできません。
export SOME_ENV_VARIABLE
その変数が環境スコープで使用可能になったように、その変数をエクスポートすると、そのインスタンスでシェルを変更した場合でもその変数にアクセスできます。次の例で理解してみましょう。
[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing shell
[vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/shell_scripting]$ exit
exit #returned to parent shell
[vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.
アナロジー: 2ベッドルームのアパートがあり、別のルームメイトと共有しているとします。共有エリアには誰でもアクセスできますが、寝室は使用できません。環境変数は共有エリアのようなもので、シェル変数は寝室のようなものです。あなたによってアクセスされます。
新しいターミナルを開くと、そのインスタンスを変更しているため、どちらの変数にもアクセスできません。そのためには、.profile
または.bashrc
(bashを使用している場合)に変数を追加する必要があります。