最近、環境変数の設定には3つのオプションがあることがわかりました。
export envVar1=1
setenv envVar2=2
env envVAr3=3
他の方法があれば教えてください。
いつ他のものよりも1つを選択する必要がありますか?ガイドラインを提案してください。
シェルの互換性に関して、どれが最も広範囲ですか(より多くのシェル方言を含む)?
私はこれに気づいた回答env
しかし、私は好みガイドを使ってこの質問を拡張したいと思います。
答え1
export VARIABLE_NAME='some value'
sh
POSIX互換シェル(、、dash
などbash
、zsh)ksh
で環境変数を設定する方法。変数にすでに値がある場合は、export VARIABLE_NAME
値を変更せずに環境変数にすることができます。
POSIX 以前のバージョンボンシェルこれはサポートされていないため、export VARIABLE_NAME='some value'
代わりに使用せずに使用するスクリプトが表示されますVARIABLE_NAME='some value'; export VARIABLE_NAME
。しかし、POSIX以前のBourneシェルは今日非常にまれです。
setenv VARIABLE_NAME='some value'
環境変数を設定するためのcsh構文。setenv
shには存在せず、cshはスクリプトでほとんど使用されず、過去20年間(zshはより長い間)対話型の使用でbashを上回ったため、遭遇しない限り忘れることができます。
このenv
コマンドは、以下を除いてほとんど役に立ちません。シェルボーンライン。引数なしで呼び出すと、環境が表示されますが、export
より良いです(値の改行と値を区切る改行を明確にするために並べ替えられ、しばしば引用されます)。引数を使用して呼び出すと、追加の環境変数を使用してコマンドを実行しますが、env
同じコマンドなしで動作します(VAR=value mycommand
例:set toとして実行)。 Shebang行が役に立つ理由は、照会を実行し、コマンド名で呼び出されたときに他の操作を実行しないためです。このコマンドは、シェルがインポートしない無効な名前の変数を含む環境を表示するために、いくつかの環境変数(引数を含むまたは除く)のみを含むコマンドを実行するために使用できます。mycommand
VAR
value
env VAR=value mycommand
env
PATH
env
-i
答え2
環境変数などの変数を変更せずに設定するとは、VAR='asdf'
同じセッションで開始されたプログラムがこれについて何も知らず、VAR
アクセスできないことを意味します。シェルスクリプトを作成するときにこの動作が必要です。
export
一方、エクスポートされた変数が現在のセッションで作成された子プロセスに表示されるように環境を変更するbash組み込みコマンド。を実行して同じ結果を得ることができますVAR='asdf' %program_name%
。
env
組み込みプログラムではなく、別のプログラムです。表面的にはあなたと同じように機能しますVAR='asdf' %program_name%
が、低レベルでは状況がより複雑になります。まず、env
始めましょう。環境を変更し、指定されたパラメーターを使用してコマンドを実行します。以下を使用して、独自のコードで同じ動作を達成できます。実行(3)システムコール。
setenv
export
答えが示すように、csh-familyシェルでのみ可能です。