完全な複合コマンドに影響する環境変数の設定

完全な複合コマンドに影響する環境変数の設定

完全な複合コマンドに影響を与えるワンタイム変数を設定するには?

たとえば、次のようになります。

FOO=1 ./foo.sh && ./foo.sh

ここfoo.shにはecho "FOO=$FOO"次のものが印刷されます。

FOO=1
FOO=

パイプライン全体に設定したい値FOOですが、現在のシェルでは設定したりエクスポートしたくありません。サブシェルの仕組み:

( export FOO=1; ./foo.sh && ./foo.sh )

...しかし、サブシェルがない方法はありますか?

ベストアンサー1

サブシェル方法は、タイピングが少ない方法です。

(
    export FOO="value"
    ./foo.sh && ./foo.sh
)

別のアプローチは、サブシェルを起動し、シェルの環境変数を設定することです。

FOO="value" sh -c './foo.sh && ./foo.sh'

別のバリエーションは、次のようにスクリプトの各呼び出しに対して変数を明示的に設定することです。

FOO="value" ./foo.sh &&
FOO="value" ./foo.sh

これはもう少し楽です。

foo=( env FOO="value" ./foo.sh )
"${foo[@]}" && "${foo[@]}"

または/bin/sh

set -- env FOO="value" ./foo.sh
"$@" && "$@"

または、呼び出しスクリプトで設定し、次のように完了したら設定を解除できます。

export FOO="value"
./foo.sh && ./foo.sh
unset FOO

おすすめ記事