POSIXシェル構文の「指定されていないASSIGNMENT_WORDまたはWORD」ルールはどういう意味ですか?

POSIXシェル構文の「指定されていないASSIGNMENT_WORDまたはWORD」ルールはどういう意味ですか?

POSIXシェル構文から http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10_02

規則7bは以下の内容を含む。

Otherwise, it is unspecified whether it is ASSIGNMENT_WORD or WORD that is returned.

どういう意味ですか?これは=、左が空ではなく、有効な名前ではないすべての単語トークンに対して互換性のあるシェルを意味しますか?例:

,=

ASSIGNMENT_WORDエラーとして分類する必要がありますが、WORDエラーを返すべきではありませんか?

答え1

いいえ指定されていない2つの正常な結果のどちらが返されますか?指定されていないため実装されます。できるエラーが発生します(仕様に記載されていないため)。確かに起こります。 2つのオプションしかないことを意味しますが、仕様には2つのオプションのうちの1つは記載されていません。〜しなければならない発生する。まったく話しません。

このタイプの表現は、誰かが念頭に置いている(おそらく仮想的な)実装が他の実装と異なる可能性があり、それを標準から除外するための合意がない状況で使用されます。

用語は1.5用語:

指定されていない

有効なプログラム構成または有効なデータ入力の使用に起因する POSIX.1-2008 で指定されていない値または動作の特性について説明します。

値や動作は POSIX.1-2008 準拠の実装によって異なる場合があります。アプリケーションは、値や動作の存在や有効性に依存してはいけません。特定の値や動作に依存するアプリケーションは、一貫した実装では移植性が保証されません。

あまり具体的ではない実装定義:

POSIX.1-2008 未定義の値または動作の説明しかし、実装者の選択に応じて。値や動作は POSIX.1-2008 準拠の実装によって異なる場合があります。アプリケーションは値や動作の存在に依存してはいけません。そのような値や動作に依存するアプリケーションは、一貫した実装全体にわたって移植性は保証されません。

答え2

それは言う:

  • foo=bar割り当てられた単語
  • =foo言葉です
  • "foo"=barまたはfoo.bar=bazできます言葉または割り当てワード、POSIXはとにかく保証を提供しないため、使用しないでください。
  • これは、名前にaを含むコマンドを(移植的に)呼び出すことができないことを意味します(意味があるように見え"foo=bar"(引用符を含む)、指定されていないことを割り当てとして扱います)。=cmd=foo=bar; "$cmd" ...=

不特定多数の中では、次のように言います。どちらかは必ず起こらなければなりません。トークンを次のように識別するだけでなく、言葉または_ASSIGNMENT_WORD_。

今これはトークン化ステップを説明することです。

その後、構文によると言葉、これはコマンド名です。そのコマンドが見つからない場合、シェルはエラーを返す可能性があります。

もしあればASSIGNMENT_WORD、シェルがそのような名前の変数を割り当てることができない場合でも、エラーが返されることがあります。

実際、一部のシェルでは:Stéphane=1またはfoo.bar=baz割り当てを許可し、一部は許可せず、それをコマンド名として扱います。一部のシェルはこれを失敗した割り当てとして扱います。

関連情報