1. ホーム
  2. bash

[解決済み] シェルプログラミングで「export」は何をするのですか?重複

2022-07-15 17:18:45

質問

私の知る限り、変数の代入は "export" が前に付いていても付いていなくても同じです。何のためにあるのでしょうか?

どのように解決するのですか?

エクスポートされた変数、例えば $HOME$PATH は、それらをエクスポートしたシェルが実行する他のプログラム (およびそれらの他のプログラムが実行するプログラムなど) が環境変数として利用できる (継承される) ようになります。 通常の(エクスポートされない)変数は、他のプログラムから利用できません。

$ env | grep '^variable='
$                                 # No environment variable called variable
$ variable=Hello                  # Create local (non-exported) variable with value
$ env | grep '^variable='
$                                 # Still no environment variable called variable
$ export variable                 # Mark variable for export to child processes
$ env | grep '^variable='
variable=Hello
$
$ export other_variable=Goodbye   # create and initialize exported variable
$ env | grep '^other_variable='
other_variable=Goodbye
$

詳しくは export ビルトイン については GNU Bash マニュアルに、また コマンド実行環境 環境 .

エクスポートされない変数は ( ... ) などで実行されるサブシェルはメインシェルの直接のクローンであるため、エクスポートされない変数も利用可能であることに注意してください。

$ othervar=present
$ (echo $othervar; echo $variable; variable=elephant; echo $variable)
present
Hello
elephant
$ echo $variable
Hello
$

サブシェルは、エクスポートされているかどうかにかかわらず、任意の変数のそれ自身のコピーを変更でき、それが実行されるプロセスによって見られる値に影響を与える可能性がありますが、サブシェルの変更は、もちろん、親シェル内の変数に影響を与えることはできません。

サブシェルに関するいくつかの情報は、以下のページにあります。 コマンドグループ化 コマンド実行環境 をBashのマニュアルに追加しました。