POSIX 仕様を調べて、これが bash だけでなく準拠シェルでこのように動作する理由を理解しましょう。
2.10.2、シェルの文法規則
規則 7(b) から、割り当てが単純なコマンドの前にある場合をカバーします。
「=」の前にあるすべての文字が有効な名前を形成する場合 (IEEE Std 1003.1-2001、セクション 3.230、名前の基本定義の巻を参照)、トークン ASSIGNMENT_WORD が返されます。(引用符で囲まれた文字は、有効な名前の形成に参加できません。)
[...]
NAME への割り当ては、Simple Commands で指定されているとおりに行われます。
したがって、POSIX 準拠のシェルでは、この割り当てを解析する必要があります。
2.9.1、簡単なコマンド
リダイレクションは、リダイレクションで説明されているとおりに実行されるものとします。
各変数の割り当ては、値を割り当てる前に、チルダ展開、パラメーター展開、コマンド置換、算術展開、および引用符の削除のために展開されます。
[...]
コマンド名が返されない場合、変数の割り当ては現在の実行環境に影響を与えます。それ以外の場合、変数の割り当てはコマンドの実行環境用にエクスポートされ、現在の実行環境には影響しません (特殊な組み込みを除く)。変数割り当てのいずれかが読み取り専用変数に値を割り当てようとすると、変数割り当てエラーが発生します。これらのエラーの結果については、シェル エラーの結果を参照してください。
したがって、単純なコマンドのプレフィックスの一部で指定された割り当てはエクスポートする必要があり、呼び出されるコマンドが特別な組み込みコマンドでない限り、「現在のシェル環境」に影響を与えてはなりません。さらに、これらのステップは、本来、コマンド呼び出しプロセスの後半で発生する必要があるリダイレクトに従います。
2.12、シェル実行環境
特別な組み込みユーティリティ (「特別な組み込みユーティリティ」を参照) 以外のユーティリティは、以下で構成される別の環境で呼び出されます。これらのオブジェクトの初期値は、以下に示す場合を除いて、親シェルの値と同じでなければなりません。
[...]
export 属性を持つ変数は、コマンドの実行中に明示的にエクスポートされた変数とともに、ユーティリティ環境変数に渡されます。
したがって、これらの変数は、fork の後、呼び出されたコマンドを実行する前に、サブシェルによって展開され、仕様により、子の環境だけに影響を与える必要があります。
さて、いくつかの異なる動作について:
SOMEVAR=BBB sh -c 'echo "$SOMEVAR"'
sh
...起動時に環境変数からシェル変数を作成するインスタンスの恩恵を受けます(POSIX仕様のセクション2.5.3で要求されているように)。
ちなみに、あなたが求めている構文は、 subshell内の代入ではなく、単純な command内の代入のためのものであることに注意してください。次のように、パイプラインに関連するサブシェルで割り当てを制御できます。
{ SOMEVAR=BBB; echo "$SOMEVAR"; } | somecommand ...
...パイプラインの最初のコンポーネントを実行しているサブシェルに割り当てを入れます(シェルが実際にそのコンポーネントをサブシェルで実行している場合、これはPOSIXに関する限り未定義の動作です;仕様から:「拡張として、ただし、パイプライン内の一部またはすべてのコマンドが現在の環境で実行される可能性があります" )。