В чем смысл правила «в спецификации 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 но не возвращать ошибку?

2 Solutions collect form web for “В чем смысл правила «в спецификации POSIX не указано, является ли оно ASSIGNMENT_WORD или WORD»”

Нет: не указано, какой из двух нормальных результатов будет возвращен. Поскольку он не указан, реализация может генерировать ошибку (поскольку в спецификации не упоминается, что должно произойти, просто подразумевается, что есть только два варианта), но спецификация не говорит о том, что один из этих двух должен произойти. Он просто не говорит.

Этот тип формулировки используется в тех случаях, когда кто-то имеет в виду (возможно гипотетическую) реализацию, которая может отличаться от других реализаций, и нет единого мнения, чтобы исключить ее из стандарта.

Термин в терминологии 1.5 :

неопределенные

Описывает природу значения или поведения, не указанных в POSIX.1-2008, что является результатом использования правильной конструкции программы или действительного ввода данных.

Значение или поведение могут варьироваться в зависимости от реализаций, соответствующих POSIX.1-2008. Приложение не должно полагаться на существование или достоверность значения или поведения. Приложение, которое полагается на какое-либо конкретное значение или поведение, не может быть гарантировано быть переносимым в соответствии с соответствующими реализациями.

Это менее специфично, чем реализация :

Описывает значение или поведение, которое не определено POSIX.1-2008, но выбирается разработчиком . Значение или поведение могут варьироваться в зависимости от реализаций, соответствующих POSIX.1-2008. Приложение не должно полагаться на существование значения или поведения. Приложение, которое полагается на такое значение или поведение, не может быть гарантировано быть переносимым в соответствии с соответствующими реализациями.

В нем говорится, что:

  • foo=bar – слово назначения
  • =foo – это слово
  • "foo"=bar или foo.bar=baz может быть слово или слово назначения , POSIX не дает вам никаких гарантий в любом случае, поэтому вы не должны его использовать.
  • это означает, что "foo=bar" (с кавычками) также не указано, что предполагает, что вы не можете вызвать (переносимо) команду с a = в ее имени (кроме как с помощью cmd=foo=bar; "$cmd" ... ), что для меня кажется ошибкой в ​​спецификации, поскольку никакая оболочка, которую я знаю, не обрабатывала бы слово, а только цитированное = s как назначение.

В этих неуказанных случаях он говорит, что один из этих двух должен произойти, потому что он не оставляет другого выбора, кроме того, что токен распознается как WORD или _ASSIGNMENT_WORD_.

Теперь это только описание стадии токенизации.

Тогда, согласно грамматику, если это СЛОВО , то это будет имя команды. Оболочка может вернуть ошибку, если соответствующая команда не найдена.

Если это ASSIGNMENT_WORD , оболочка все равно может вернуть ошибку, если она не может назначить переменную с таким именем.

На практике вы обнаружите, что некоторые оболочки позволяют: Stéphane=1 или foo.bar=baz как назначение, некоторые – нет, и затем будут обрабатывать их как имена команд. Некоторые оболочки будут относиться к ним как к неудачному назначению.

  • Каков наиболее правильный способ передать массив функции?
  • Как удалить часть пути в интерактивной оболочке?
  • Эквивалент Java String.getBytes () в оболочке Unix (Cygwin)
  • Почему здесь не работает grep с использованием трубы?
  • Объяснения сценария построения образа Android
  • Как отображать команды в другом терминале?
  • Что означает этот синтаксис "$ {i% .avi} .mp4"
  • Замена tmux на exec
  • Мне нужен сценарий оболочки для преобразования файла csv в файл с ограничениями (|), сохраняя запятые внутри закрывающих котировок
  • Как решить эту «неоднозначную перенаправление»
  • Как проверить, задан ли данный параметр в заданном массиве?
  • Linux и Unix - лучшая ОС в мире.