シェル変数と環境変数の両方が同じ名前を持つ場合、どちらが優先されますか?

シェル変数と環境変数の両方が同じ名前を持つ場合、どちらが優先されますか?

Bashに次のように入力します。

env | grep USER

そして

set | grep USER

同じユーザー名を2回指定します。

たとえば、入力中にecho $USERシェルまたは環境変数が表示されるかどうかはどうすればわかりますか?

ベストアンサー1

~のためPOSIX互換シェル(Bashを含む)標準は次のように言います。

2.5.3 シェル変数
変数は環境で初期化する必要があります。[...] 変数が環境で初期化されたら、すぐにエクスポート用にマークする必要があります。専用組み込みエクスポートを参照してください。変数の割り当てにより、新しい変数を定義して初期化できます。[など。 ]

また、薬export:

export name[=word]...
シェルは、指定された名前に対応する変数にエクスポート属性を割り当てる必要があります。これは、後で実行されるコマンド環境にその変数を配置します。

したがって、シェルの観点からは変数のみがあります。これらのいくつかは、シェルの起動時に環境から出ることができ、一部はシェルによって開始されたプロセスの環境にエクスポートできます。

(「環境」とは、実際にプロセスが開始されたときにプロセスに渡される文字列の束です。始めるために渡されましたが、プロセスに応じて他の問題かもしれませんが、もちろん、通常はすべての環境変数を渡す問題です。


POSIX以外のシェルを使用している場合は、csh状況が異なる場合があります。たとえば、次のようになります。

$ csh
% echo $foo
foo: Undefined variable.
% setenv foo bar
% echo $foo
bar
% set foo=asdf
% echo $foo
asdf
% env |grep foo
foo=bar
% exit

おすすめ記事