パイプラインサブシェルに対して独立して環境変数を設定する

パイプラインサブシェルに対して独立して環境変数を設定する

しばらくこの質問が気になりましたが、いつも尋ねるのを忘れました。

次のパイプラインがある場合:

a | b

次のように環境変数を個別に設定する方法はありますか?

x="foo" a | x="bar" b

答え1

標準は、特定の環境設定の前にシェルマクロ拡張が行われるように定義するため、実行したい操作が標準と競合します。

special shell builtinPOSIXでは、シェル全体に影響を与えるために先行する環境ステートメントが必要なので、必要に応じて実行できる方法もあります。コマンド:は次のとおりですspecial shell builtin

努力する:

(x="foo" :; a) | (x="bar" :; b)

メインシェルプロセスが影響を受けないようにするには、これをサブシェルで実行する必要があります。 OPが彼の意見で期待した内容を置き換えてa印刷すると、b次のようになります。echo $x,

(x="foo" :; echo $x) | (x="bar" :; echo $x)

まあ、パイプの左側の出力が失われます...

ただし、すでにサブシェルを使用する必要があるため、次のものを使用できます。

 (x="foo"; echo $x) | (x="bar"; echo $x)

構文を使用して最初にサブシェルでシェル変数を設定し、それを使用します。xコマンドから環境に必要な場合は、export x後者の例で必要です。

関連情報