割り当ては、コマンド置換がある場合を除いて、終了ステータスを持つコマンドに似ていますか?
次の例とそれらのPOSIXシェルでの出力を参照してください。 false;echo $?またはfalse || echo 1:1 false;foo="bar";echo $?またはfoo="bar" && echo 0:0 foo=$(false);echo $?またはfoo=$(false) || echo 1:1 foo=$(true);echo $?またはfoo=$(true) && echo 0:0 /programming/6834487/what-is-the-variable-in-shell-scriptingの最高投票の回答で述べたように: $? 最後に実行されたコマンドの戻り値を見つけるために使用されます。 これはおそらくこの場合少し誤解を招く可能性があるので、そのスレッドからの投稿でも引用されているPOSIX定義を取得しましょう。 ?最新のパイプラインの10進数の終了ステータスに展開します(パイプラインを参照)。 したがって、割り当て自体はゼロの終了値を持つコマンド(またはパイプラインパーツ)としてカウントされているように見えますが、割り当ての右側の前に適用されます(たとえば、ここでの例ではコマンド置換呼び出し)。 この振る舞いが実用的な見地からどのように意味を成すかはわかりますが、割り当て自体がその順序でカウントされることは、私には幾分珍しいようです。多分それが私にとって奇妙な理由をより明確にするために、割り当てが関数であったと仮定しましょう: ASSIGNMENT( VARIABLE, VALUE ) そしてfoo="bar"だろう ASSIGNMENT( "foo", "bar" ) のfoo=$(false)ようなものになります ASSIGNMENT( "foo", EXECUTE( "false" ) ) そのことを意味するEXECUTE実行が最初と後にのみ ASSIGNMENT実行されますが、それはまだだEXECUTEここで問題のステータス。 私の評価は正しいですか、それとも何かを誤解/不足していますか?これらは、私がこの振る舞いを「奇妙な」ものと見なす正しい理由ですか?