$ unset foo
$ unset bar
$ echo $foo
$ echo $bar
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ foo=a
$ bar=b
$ export bar
$ echo $foo
a
$ echo $bar
b
$ PATH=
$ echo $PATH
$ /bin/bash
bash: lesspipe: No such file or directory
bash: dircolors: No such file or directory
bash: ls: No such file or directory
$ echo $foo
$ echo $bar
b
$ echo $PATH
$
ご覧のとおり、変更は$PATH
サブシェルに影響し、export
他の変数を編集する必要があります。なぜ?
ベストアンサー1
実際には2種類の変数があります。
- 環境変数
- シェル変数
状況をより複雑にするために、2つは同じように見え、コマンドを使用してシェル変数を環境変数に変換できますexport
。
このenv
コマンドは、現在の環境変数のセットを表示します。
$ myvar=100
$ env | grep myvar
$ export myvar
$ env | grep myvar
myvar=100
コマンドの存続期間中に変数を一時的にエクスポートすることもできます。
$ env | grep anothervar
$ anothervar=100 env | grep anothervar
anothervar=100
$ env | grep anothervar
$
シェルが起動すると、複数の環境変数(0になる可能性があります)を継承します。
起動スクリプト(.bash_profile
ディレクトリ.bashrc
内のファイル/etc
など)も変数を設定およびエクスポートできます。
最後に、環境が空の場合、シェル自体が環境変数のデフォルト値を設定できます。例えば
$ PATH=foo /bin/bash -c 'echo $PATH'
foo
$ PATH= /bin/bash -c 'echo $PATH'
$ unset PATH
$ /bin/bash -c 'echo $PATH'
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.