set +a は -a フラグを設定解除しません。

set +a は -a フラグを設定解除しません。

Mac 10.11.6でGNU bashバージョン3.2.57(1)-release(x86_64-apple-darwin15)を使用すると、このset +aコマンドは機能しないようです。

script.py

#!/usr/bin/python
import os
print("VAR0 is:", os.environ.get("VAR0")

注文する:

$ VAR0=abc
$ ./script.py
('VAR0 is:', None)   # expected
$ set -a
$ VAR0=abc
$ ./script.py
('VAR0 is:', 'abc')   # expected, VAR0 has been exported to the environment and script.py has access to it
$ set +a
$ VAR0=def
$ ./script.py
('VAR0 is:', 'def')   # <= unexpected

ベストアンサー1

あなたはそれが何であるかset -a誤解しました。変数をエクスポートすると、変数に対する変更は常に環境に反映されます。 (これはの歴史的実装では常に真ではありませんでしたが、shすべての最新のPOSIX互換シェルではそうです。)この-aオプションは、変数が以前にエクスポートされていなくても強制的にエクスポートすることを可能にします。デフォルトでは、割り当てはシェル変数を生成します。しかし、-a実際に割り当てると、変数がまだエクスポートされていない場合でも変数がエクスポートされます。

set +aこの-aオプションの設定を解除してください。エクスポートした変数の値を変更すると、環境(-a有効)に影響します。

おすすめ記事