環境変数 1行が空です。

環境変数 1行が空です。

私のzshはなぜこのように動作しますか?

% MYVAR="hi" echo $MYVAR

% MYVAR="$(date)" echo $MYVAR

% export MYVAR="$(pwd)"
% echo $MYVAR
/Users/theonlygusti

環境変数が同じ行に設定されていないのはなぜですか?

答え1

指揮中

MYVAR="hi" echo $MYVAR

この変数はコマンド環境で設定されますMYVAR。ただし、コマンドはこの変数を使用しません。現在のシェルはコマンドラインから引数を拡張します。hiechoecho$MYVAR電話する前にecho

したがって、MYVAR変数が以前にシェルに存在しなかった場合、コマンドは改行のみを出力します。

最後の例では、echoコマンドラインから拡張を呼び出す前にシェルで変数を設定しました。$MYVARこの時点で変数が結果に設定されるため$(pwd)(エクスポートは不要です)、シェルは$MYVAR変数を呼び出す前にその値に置き換えますecho

間の違い

variable=value some-command

そして

variable=value; some-command

またはそれに対応する

variable=value
some-command

はい、最初のケースでは変数は現在のシェルではなく環境の値に設定されますがsome-command、2番目または3番目の場合、変数は現在のシェルに設定され、呼び出さsome-commandれます。別の方法でエクスポートした場合、変数を使用したい場合は、variable環境でも変数を使用できます。some-command

例:

$ unset -v var

他のコマンドの呼び出し中に変数を設定すると、コマンド環境に変数が設定されますが、ローカル環境には設定されません。

$ var=1 sh -c 'printf "var is %s\n" "$var"'
var is 1
$ printf 'var is %s\n' "$var"
var is

ローカル環境で変数を設定しますが、エクスポートせずにローカルに設定してください。

$ var=1; sh -c 'printf "var is %s\n" "$var"'
var is
$ printf 'var is %s\n' "$var"
var is 1

子プロセスで使用できるように変数をエクスポートします。

$ export var
$ sh -c 'printf "var is %s\n" "$var"'
var is 1

気づく

MYVAR=$(pwd)

同じですか?

MYVAR=$PWD

関連情報