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

아니요명시되지 않은두 가지 정상적인 결과 중 어느 것이 반환될까요? 지정되지 않았기 때문에 구현됩니다.할 수 있다오류가 발생합니다(사양에 언급되지 않았기 때문에).무엇확실히 일어날 것입니다. 단지 두 가지 옵션만 있음을 의미하지만 사양에는 두 가지 옵션 중 하나가 나와 있지 않습니다.~ 해야 하다발생하다. 전혀 말하지 않습니다.

이러한 유형의 표현은 누군가가 염두에 두고 있는 (아마도 가상적인) 구현이 다른 구현과 다를 수 있고 이를 표준에서 제외하기 위한 합의가 없는 상황에서 사용됩니다.

용어는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할당을 허용하고 일부는 허용하지 않으며 이를 명령 이름으로 처리합니다. 일부 쉘은 이를 실패한 할당으로 처리합니다.

관련 정보