私の知る限り、変数の割り当ては、その前に「export」が付いていても付いていなくても同じです。これは何のためですか?
ベストアンサー1
$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 マニュアルに記載されています。