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


17

どのような違いがあるsetenvdeclareおよびexportLinuxのシェルで変数を設定するときのような、bash


1
この質問がなぜ投票されたのですか?
l0b0 14年

回答:


5

setとdeclareはわずかに異なり、setはより強力です。

https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins 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 ~#

declareそして、setenv?エクスポートvs宣言?
パセリエ

これは単純に質問に答えていないからです。
ダニエルC.ソブラル

これが良いかどうか教えてください。
ショーンP.

1

まず、あなたはそれを理解しなければならないenvironment variablesし、shell variables同じものではありません。

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

それでは、質問にお答えします。

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

要するに:

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

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

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