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 토큰 인식,예를 들어,
- 현재 문자가 인용되지 않은 경우
<blank>
, 이전 문자를 포함하는 모든 토큰은 구분되고 현재 문자는 삭제됩니다.
답변2
이 주소가 귀하의 질문에 직접적으로 답변해 줄 것으로 믿습니다.
2.10.2 쉘 구문 규칙
[명령어 이름]
TOKEN이 예약어인 경우 해당 예약어의 토큰 식별자가 생성됩니다. 그렇지 않으면 토큰 WORD가 반환되어야 합니다.
이는 규칙 7보다 우선하는 규칙 1입니다. 모든 단일 단어(제외 =
)는 "명령 이름"으로 해석됩니다. 가 포함된 경우 =
규칙 7이 적용됩니다.
규칙 1에는 =를 포함하는 예외가 없다고 말할 수도 있지만, 이는 다음 설명에서 가정해야 한다고 생각합니다.간단한 명령":
2.9.1 간단한 명령
"간단한 명령"은 임의의 순서로 선택적인 변수 할당 및 리디렉션의 시퀀스이며 선택적으로 단어와 리디렉션이 뒤따르고 제어 연산자에 의해 종료됩니다.
간단히 말해서: "변수 할당" "단어" "리디렉션"
그리고: "변수 할당"에는 =
.