シェル(例:bashシェル)には、シェル変数の概念と環境変数の概念があります。
しかし、他の非シェルプロセス(Firefox、geditなど)はどうですか?これらのプロセスにもシェル変数がありますか、それとも環境変数だけですか?
答え1
非シェルプロセスにはシェル変数はありません。 CプログラムにはC変数があり、awk
プログラムには変数がありawk
、PerlプログラムにはPerl変数があります。これらの変数はすべて、独自の方法でシェル変数とは大きく異なります。
他のプロセスがシェル変数を持たない、またはシェル変数にアクセスできない理由は、シェル変数がエクスポートされないため(つまり環境変数ではない)ため、一部のシェルではシェル変数よりも多くの情報をシェル変数に追加できる可能性があります。だからです。 1つのシェル変数。読み取り専用変数、整数変数などの属性などの文字列値これらの型属性(組み込みtypeset
コマンドを参照)は、環境変数には適用できません。そして使用される別のプロセスで。
一部のシェル(例bash
:)は、配列と関連配列もサポートしています。これらの構造は、キー(変数名)と値の両方が環境変数に適用されるプレーンテキスト文字列である単純なキーと値のペアの形式と比較して複雑すぎます。つまり、共通環境で他のプロシージャと一緒に使用するためにエクスポートすることはできません。
すべてのプロセスは、親プロセスから継承された環境変数にアクセスできます。言語に応じて、プログラムはさまざまな方法でこのコンテンツにアクセスできます。
たとえば、ACプログラムはそれを使用でき、プログラムはgetenv()
連想awk
配列を使用できENVIRON
、Perlプログラムはハッシュを使用して環境変数にアクセスできます。%ENV
よくわかりませんが、gedit
シェルvim
に似た構文を使用して環境変数にアクセスできます。
:echo $HOME
例えば。ここではシェルとは何の関係もなく、echo
同様の方法で動作します。echo
さらに、文字列はユーザーに環境変数を公開する方法$HOME
でもあります。vim