ウェブサイト検索

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 $ostechnix

ostechnix 変数の値が表示されます:

Welcome to ostechnix.com blog!

では、次のコマンドを実行して新しい Bash シェルセッションを開始してください。

$ bash

次に、echo コマンドを使って ostechnix 変数の値を表示してみてください:

$ echo $ostechnix

export せずに bash 変数を定義する

ほら?何も返ってきません!出力が空白でしか見えません。したがって、exportなしで変数を定義すると、それは子プロセスで利用できないことが証明されます。

同じ変数をexportオプションで再度定義しましょう:

$ export ostechnix="Welcome to ostechnix.com blog!"

変数の値を表示する:

$ echo $ostechnix

サンプル出力:

Welcome to ostechnix.com blog!

新しいシェルセッションを始める:

$ bash

変数の値を表示することをもう一度試してください:

$ echo $ostechnix

これで値を返します。

export を使った場合と使わない場合の Bash 変数の定義の違い

したがって、export によって、その変数はそのシェル環境内の他のすべての子プロセスでも利用可能になります。