POSIX 쉘 구문이 FOO=bar foobar를 허용하는 방법

POSIX 쉘 구문이 FOO=bar foobar를 허용하는 방법

POSIX 쉘 구문이란 무엇입니까? http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10

다음과 같은 할당이 포함된 간단한 명령을 허용합니다.

FOO=bar foobar

여기서 첫 번째 단어는 규칙 7b에 따라 토큰으로 허용되어야 합니다 ASSIGNMENT_WORD(비록 이 규칙이 관련된 제작에 적용된다는 것이 명시적으로 지정되어 있지는 않지만 ASSIGNMENT_WORD이해할 수 있다고 생각합니다).

그러면 두 번째 말은 받아들일 수 없습니다. 이를 줄이기 위한 유일한 방법은 cmd_word프로덕션을 사용하는 것입니다. 그러나 이를 위해서는 규칙 7b에서 이것이 a라고 말하고 WORD규칙 7b에서는 를 포함하지 않는 단어에 대해 아무 것도 언급하지 않습니다 =.

규칙 7b에는 다음 문구가 추가되어야 합니다.

If the TOKEN does not contain `=` then it is a `WORD`.  

이것이 없으면 현재 작성된 구문이 잘못되었습니다. 내가 맞나요?

답변1

문법은 한 단어만 할당하며 그 이후의 단어는 명령으로 처리됩니다.

당신이 인용한 규칙은TOKEN, 따옴표가 없는 공백은 포함할 수 없습니다. 바라보다2.3 토큰 인식,예를 들어,

  1. 현재 문자가 인용되지 않은 경우<blank>, 이전 문자를 포함하는 모든 토큰은 구분되고 현재 문자는 삭제됩니다.

답변2

이 주소가 귀하의 질문에 직접적으로 답변해 줄 것으로 믿습니다.

2.10.2 쉘 구문 규칙

  1. [명령어 이름]

    TOKEN이 예약어인 경우 해당 예약어의 토큰 식별자가 생성됩니다. 그렇지 않으면 토큰 WORD가 반환되어야 합니다.

이는 규칙 7보다 우선하는 규칙 1입니다. 모든 단일 단어(제외 =)는 "명령 이름"으로 해석됩니다. 가 포함된 경우 =규칙 7이 적용됩니다.

규칙 1에는 =를 포함하는 예외가 없다고 말할 수도 있지만, 이는 다음 설명에서 가정해야 한다고 생각합니다.간단한 명령":

2.9.1 간단한 명령

"간단한 명령"은 임의의 순서로 선택적인 변수 할당 및 리디렉션의 시퀀스이며 선택적으로 단어와 리디렉션이 뒤따르고 제어 연산자에 의해 종료됩니다.

간단히 말해서: "변수 할당" "단어" "리디렉션"

그리고: "변수 할당"에는 =.

관련 정보