回答:
export VARIABLE_NAME='some value'
(任意のPOSIX準拠のシェルで環境変数を設定する方法ですsh
、dash
、bash
、ksh
、など。また、zshのは)。変数に既に値がある場合は、値export VARIABLE_NAME
を変更せずに変数を環境変数にすることができます。
POSIX以前のBourneシェルはこれをサポートしていなかったため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
の実行をmycommand
してVAR
までセットvalue
だけのような、env VAR=value mycommand
)。その理由は、env
シェバング行に便利ですが実行することでPATH
、ルックアップ、およびコマンド名で呼び出されたとき、何かをしないために起こります。このenv
コマンドは、いくつかの環境変数のみでコマンドを実行するのに役立ちます。-i
、またはシェルがインポートしない無効な名前の変数を含む環境を表示するパラメーターなし。
変数を設定すると、VAR='asdf'
環境が変更されないままになります。つまり、同じセッションで起動するプログラムは何もVAR
認識せず、アクセスできなくなります。シェルスクリプトを記述するときにこの動作が必要です。
export
一方、環境を変更するbashビルトインは、現在のセッションで生成された子プロセスに対してエクスポートされた変数を可視にします。を実行して同じことを実現できVAR='asdf' %program_name%
ます。
env
組み込みではなく、それ自体がプログラムです。表面上では正確にしたときのように動作しますVAR='asdf' %program_name%
が、低レベルで物事はもう少し複雑になります。まず、env
起動します。環境を変更し、指定された引数でコマンドを実行します。exec(3)システムコールを使用することにより、独自のコードで達成できる同じ動作。
setenv
ちょうどであるexport
あなたの答えで述べたように、CSH-家族の殻に。
これに答える回答を含むいくつかの質問があります。
(等。)
VAR=asdf
は、環境内VAR
に既にある場合は環境を更新します。(これは、元のボーンシェルには当てはまりませんでした。)