GNU/Linux >> Linux の 問題 >  >> Linux

エクスポートされたシェル変数とBashにないシェル変数の違いは?

Bashは、エクスポートされた変数とエクスポートされていない変数を区別しているようです。

例:

$ FOO=BAR
$ env | grep FOO
$ set | grep FOO
FOO=BAR

set 変数は表示されますが、env しません。

$ export BAR=FOO
$ env | grep FOO
BAR=FOO
$ set | grep FOO
BAR=FOO
FOO=BAR

set 両方の変数が表示されますが、env エクスポートされた変数のみが表示されます。

setを知っています bashビルトインであり、env そうではありません。

エクスポートされる変数とエクスポートされない変数の違いは何ですか?

承認された回答:

エクスポートされた変数は、それらをエクスポートしたシェルによって実行されるコマンドの環境に運ばれますが、エクスポートされていない変数は、現在のシェル呼び出しに対してローカルです。 exportから マニュアルページ:

シェルは、指定された名前に対応する変数にエクスポート属性を与えます。これにより、それらは後で実行されるコマンドの環境に置かれます。

set 現在の環境を出力します。これには、エクスポートされていないローカル変数が含まれます。 env は新しい環境でプログラムを起動するために使用され、引数なしでその新しい環境がどうなるかを出力します。 env以降 新しい環境を作成している場合、そのシェルから起動されたプログラムの場合と同様に、エクスポートされた変数のみが取得されます。たとえば、最初のシェル内に2番目のシェルを生成します($$を使用しました 内側のシェルでプロンプトを表すため):

$ FOO=BAR
$ bash
$$ echo $FOO             # Note the empty line

$$ exit
$ export FOO
$ bash
$$ echo $FOO
BAR
$$

値だけでなく、エクスポートされるのは変数であることに注意してください。これは、export FOOを実行すると、 、FOO 後で変更された場合でも、グローバル変数になり、後続の環境に表示されます:

$ export FOO
$ FOO=BAR
$ bash
$$ echo $FOO
BAR
$$

Linux
  1. 組み込みコマンドとそうでないコマンドの違いは?

  2. (bash)シェルの特別なパラメーター/変数はどれですか?

  3. bash:配列の環境変数を設定し、それをシェル スクリプトから参照解除すると失敗する

  1. Nohup とアンパサンドの違いは何ですか

  2. #!/usr/bin/env bash と #!/usr/bin/bash の違いは何ですか?

  3. 検索コマンドの '{}' と {} の違いは?

  1. ログインシェルと非ログインシェルの違いは?

  2. コマンドライン(bash)の「And」の違い??

  3. [[$ a ==Z*]]と[$a==Z *]の違いは?