bash-builtinsの 'set'および 'export'は何をしますか?


46

私はBashの目的setexportBashで少しばかり困っています(そして、おそらく他のシェルもおそらく推測します)。

私はそれが環境変数を設定するためだと思いますが、それはVARIABLE=VALUE正しいことでできますか?

また、タイピングsetexportそれ自体で異なる値が表示されます。

それで、彼らの目的は何ですか?



私はいつも次の2つのbashスクリプトから始めます。#!/ usr / bin / env bash set -euxo pipefailこのリンクは同じことを美しく説明しています。coderwall.com/p/fkfaqq/...
147.3k

回答:


50

export現在のプロセスの子にエクスポートします。デフォルトではエクスポートされません。例えば:

$ foo=bar
$ echo "$foo"
bar
$ bash -c 'echo "$foo"'

$ export foo
$ bash -c 'echo "$foo"'
bar

set一方、シェルの属性、たとえば位置パラメータを設定します。

$ set foo=baz
$ echo "$1"
foo=baz

bazはに割り当てられていないことに注意してfooください。これは単にリテラル位置パラメータになります。他にも多くのことsetができます(主にシェルオプション)help set

印刷に関してexportは、引数なしで呼び出されると、シェルの環境内のすべての変数が印刷されます。エクスポートさsetない変数も出力します。また、他のオブジェクトをエクスポートすることもできます(ただし、これは移植性がないことに注意する必要があります)help export


それは非常に有用な答えです。ただし、http_proxy = abc.comだけでhttp_proxyを設定すると、子プロセス、たとえばwgetをエクスポートせずに実行します。どうすればいいの?
mydoghasworms

2
@mydoghasworms考えられる2つの理由。1つは、コマンドをとして実行していfoo=bar commandます。これは、単一のコマンドの暗黙的なエクスポートです。2番目の可能性は、http_proxy変更する前に環境に既にエクスポートされていることです。
クリスダウン

ええ、あなたは正しいです。素晴らしい、ありがとう!
mydoghasworms

6

参照help set:setは、シェル属性と位置属性を設定するために使用されます。

エクスポートされない変数は、子プロセスに継承されません。export変数をエクスポート用にマークするために使用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.