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