Fish関数の評価で-x設定が機能しないのはなぜですか?

Fish関数の評価で-x設定が機能しないのはなぜですか?

プログラムの出力に基づいて、Fish関数でいくつかの変数を動的に設定しようとしたときに問題が発生しました。

問題の範囲をMWEに絞り込んだ。

function example
    eval (echo 'set -x FOO 1;')
end

呼ぶ:

>example
>echo $FOO

結果は出力されません。つまり、FOO環境変数はまだ設定されていません。どうすればいいですか?

ベストアンサー1

より単純な形でも同じことが起こります。

function trythis
     set -x foo bar
end

trythis今実行するとecho $foo設定されません。これは、Fish自体が変数の範囲を変更しないためです-x。変数は、既にグローバルであるか、どこにも存在しない限り、基本的に関数に対してローカルです。

努力する:

  eval (echo 'set -gx FOO 1;') 

ここでは、gグローバルな状況を表します。これにより、変数は通常のPOSIXexport値のように動作します。興味深いことに、これはeval通常と同じように機能します。コマンドラインで直接sans行を使用するsetと設定されるため、プロセス置換は新しいスコープやサブシェルを導入せず、関数内でこのように実行されたときg$FOOeval()関数の範囲が適用されます。

おすすめ記事