web-dev-qa-db-ja.com

Linuxシェルで変数を設定するときのset、env、declare、exportの違いは何ですか?

setなどのLinuxシェルで変数を設定するときのenvdeclareexportbashの違いは何ですか?

17
user3872279

Setとdeclareは少し異なるようですが、setの方が強力です。

https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins declare:「declare:」にある「declare」を参照してください。 、代わりに変数の値を表示します。

https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin の下に "set"を設定します= = set: "このビルトインは複雑なので、独自のセクション。setを使用すると、シェルオプションの値を変更して位置パラメータを設定したり、シェル変数の名前と値を表示したりできます。」

ENVはBashの環境変数です: https://www.gnu.org/software/bash/manual/bash.html#Bash-Variables envはLinuxコマンドです。これは良いリファレンスだと思います: https://unix.stackexchange.com/questions/103467/what-is-env-command-doing

これはエクスポートの良い説明だと思いました: http://www.unix.com/302531838-post2.html

また: https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins * export(Bourneから): "子に渡される各名前をマーク環境におけるプロセス。」

上記のURLからコードを借用:

root@linux ~# x=5                <= here variable is set without export command
root@linux ~# echo $x
5
root@linux ~# bash               <= subshell creation
root@linux ~# echo $x            <= subshell doesnt know $x variable value
root@linux ~# exit               <= exit from subshell
exit
root@linux ~# echo $x            <= parent Shell still knows $x variable
5
root@linux ~# export x=5         <= specify $x variable value using export command
root@linux ~# echo $x            <= parent Shell doesn't see any difference from the first declaration
5
root@linux ~# bash               <= create subshell again
root@linux ~# echo $x            <= now the subshell knows $x variable value
5
root@linux ~#
5
Shawn P.

まず、environment variablesShell variablesは同じものではないことを理解する必要があります。

次に、シェルには属性があり、それがどのように機能するかを制御していることを知っておく必要があります。これらの属性は、環境変数でもシェル変数でもありません。

それでは、あなたの質問に答えましょう。

  1. env:オプションなしで、現在の環境変数とその値を表示します。ただし、-iフラグを使用して単一のコマンドの環境変数を設定するために使用できます。
  2. set:オプションなしで、それぞれの名前と値シェル変数が表示されます*〜rhelでman setを実行すると、 Shell属性の設定にも使用できます。このコマンドDOES NOT setenvironmentまたはShell variable
  3. declare:オプションなし、envと同じ; シェル変数の設定にも使用できます
  4. export:作成シェル変数環境変数

要するに:

  1. setはシェルも環境変数も設定しません
  2. envは単一のコマンドに環境変数を設定できます
  3. declareはシェル変数を設定します
  4. exportはシェル変数を環境変数にします

[〜#〜] note [〜#〜]declare -x VAR=VALは、シェル変数を作成し、それをエクスポートして、環境変数にします。

2
Tran Triet