exportありとなしでBash変数を定義する違い
私は自分のLinuxデスクトップでBashの履歴に重複するエントリを避けるために、~/.bashrcファイルにこの"export HISTCONTROL=ignoredups"行を追加しました。HISTCONTROL変数に"export"を付けたのに気づきましたか?"export"オプションは何のためか知っていますか?Bash変数をexportオプション付きで定義する場合となしで定義する場合の違いが気になるなら、続きを読んでください!
exportありとなしでBash変数を定義する違い
変数をすべてのサブプロセス(または子プロセス)で利用できるようにするために、exportで変数を定義します。つまり、下のようにexportで変数を定義すると、
export variable_name=valueその変数は、そのシェルプロセスから実行する任意のサブプロセスで利用可能です。
以下のようにexportなしで変数を定義すると、
variable_name=valueこの変数はシェルに限定されており、他のサブプロセスでは利用できません。一時的な変数やループ変数として使用できます。
よりよく理解できるように、例をお見せさせてください。
次のように、"export"なしで"ostechnix"という名前の変数を定義させてください:
$ ostechnix="Welcome to ostechnix.com blog!"次に「echo」コマンドを使って値を表示します:
$ echo $ostechnixostechnix 変数の値が表示されます:
Welcome to ostechnix.com blog!では、次のコマンドを実行して新しい Bash シェルセッションを開始してください。
$ bash次に、echo コマンドを使って ostechnix 変数の値を表示してみてください:
$ echo $ostechnixほら?何も返ってきません!出力が空白でしか見えません。したがって、exportなしで変数を定義すると、それは子プロセスで利用できないことが証明されます。
同じ変数をexportオプションで再度定義しましょう:
$ export ostechnix="Welcome to ostechnix.com blog!"変数の値を表示する:
$ echo $ostechnix
サンプル出力:
Welcome to ostechnix.com blog!新しいシェルセッションを始める:
$ bash変数の値を表示することをもう一度試してください:
$ echo $ostechnixこれで値を返します。
したがって、export によって、その変数はそのシェル環境内の他のすべての子プロセスでも利用可能になります。

