web-dev-qa-db-ja.com

環境変数とシェル変数、違いは何ですか?

誰かが私に言った:

BASHは環境変数ではなく、シェル変数です

違いは何ですか?

56
Tom Brito

$BASHは、ローカル変数であり、現在の(bash)シェルでのみ有効です。

$Shellなどの環境変数はシステム全体で有効です。現在のBashシェルでは、$BASHbashの実行パスを指しますが、$Shellはデフォルトとして定義されたシェルを指します(これは同じ値の場合があります)。

環境変数の説明については、Ubuntuヘルプの Environment Variables を参照してください。

33
Takkat

環境変数は、プログラムおよびその子プログラムでグローバルに利用可能です。シェル変数は、現在のシェルでのみ使用可能です。シェル変数を環境変数として使用可能にするには、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
48
Lekensteyn

違いがあります。 シェル変数と環境変数 は、私ができることをよりよく説明しますが、ここからの抜粋です:

シェル変数に変更が加えられた場合、フォークされたサブプロセスが変更を確認できるように、対応する環境変数に明示的に「エクスポート」する必要があります。シェル変数は、それらが定義されたシェルに対してローカルであることを思い出してください。

8
Peter.O

シェル変数:短期、シェルの現在のインスタンスにのみ適用され、システム全体には適用されません

環境変数:長期使用、有効なシステム全体、グローバルに許可

規則により、シェル変数の名前は小文字で、Envn。変数は大文字で書き込まれます

1
Ashish

この質問に答えるには、まず変数のスコープを理解してみてください。

SOME_ENV_VARIABLE="testing.txt"のような新しい変数を作成すると、Shell scopeに存在します。つまり、シェルのインスタンスユーザーがログインしている場所からアクセスできます。たとえば、新しいターミナルを開くか、シェルを変更する(たとえば、cshに切り替える)と、その変数にアクセスできなくなります。

export SOME_ENV_VARIABLEのような変数をエクスポートすると、その変数は環境スコープで利用可能になります。つまり、シェルを変更する場合、そのインスタンスで、stillその変数にアクセスします。次の例を使って理解してみましょう。

[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を使用している場合)。

0
Vishrant