どのような違いがあるset
、env
、declare
およびexport
Linuxのシェルで変数を設定するときのような、bash
?
どのような違いがあるset
、env
、declare
およびexport
Linuxのシェルで変数を設定するときのような、bash
?
回答:
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
そして、set
やenv
?エクスポートvs宣言?
まず、あなたはそれを理解しなければならないenvironment variables
し、shell variables
同じものではありません。
次に、シェルにはその動作を制御する属性があることを知っておく必要があります。これらの属性は、環境変数でもシェル変数でもありません。
それでは、質問にお答えします。
env
:オプションなしで、現在の環境変数とその値を表示します。ただし、-i
フラグを使用して単一コマンドの環境変数を設定するために使用できますset
:オプションなしで、各シェル変数の名前と値が表示されます* man set
〜rhelで実行中 シェル属性の設定にも使用できます。このコマンドは、環境もシェル変数も設定しません。declare
:オプションなし、env
; と同じ シェル変数の設定にも使用できますexport
:シェル変数を 環境変数にします要するに:
set
シェルも環境変数も設定しませんenv
単一のコマンドに環境変数を設定できますdeclare
シェル変数を設定しますexport
シェル変数を環境変数にしますNOTE
declare -x VAR=VAL
はシェル変数を作成し、それをエクスポートして環境変数にします。