Bash의 선택: 연산자와 예약어

Bash의 선택: 연산자와 예약어

Bash에서 나는 연산자나 예약어로 무언가를 선택하는 몇 가지 예를 발견했습니다: (모두 Bash 매뉴얼의 인용문)

  1. (...){...}: 둘 다 명령 목록을 만드는 데 사용됩니다.

    그러나 첫 번째는 연산자이고 두 번째는 예약어입니다.

    서브쉘을 생성하는 것 외에도 역사적 이유로 두 구성 사이에는 미묘한 차이가 있습니다. 중괄호는 예약어이므로 공백이나 기타 쉘 메타 문자로 목록과 구분해야 합니다. 괄호는 공백으로 목록과 구분되지 않더라도 쉘에서 별도의 토큰으로 인식되는 연산자입니다.

  2. !: 논리적 부정을 나타냅니다.

    파이프 앞에 오면 예약어입니다.

    예약어 '!'가 파이프 앞에 오면 종료 상태는 위의 종료 상태에 대한 논리적 부정입니다.

    세 곳의 연산자입니다.

    • 쉘 산술 표현식에서,
    • 조건식에서[...]
    • 조건식에 포함됩니다 [[...]].

내 질문은 다음과 같습니다

  1. 동일한 의미를 갖고 있음에도 불구하고 일부는 예약어이고 다른 일부는 연산자인 이유는 무엇입니까?

    내 목표는 Bash의 디자인 역사나 Bash가 왜 그런 방식으로 디자인되었는지 이해하는 것이 아닙니다(따라서 이 질문을 건너뛰어도 됩니다). 하지만 도움이 될 수도 있습니다. 내 목표는 예약어는 할 수 없지만 연산자는 할 수 있는 것과 그 반대의 경우를 이해하는 것입니다(다음 두 질문 참조).

  2. 예약어 대신 연산자로 만들면 어떤 이점이 있나요?

  3. 연산자 대신 예약어를 만들면 어떤 이점이 있나요?

  4. 비슷한 예가 또 있나요?

    내 의도는 단지 예를 수집하는 것이 아니라 그로부터 몇 가지 원칙을 도출하여(위의 두 질문 참조) 특정 세부 사항을 더 잘 이해할 수 있고 더 이상 혼란과 실수가 발생하지 않도록 하는 것입니다. 그러니 이 질문은 건너뛰세요.

답변1

먼저 "연산자"와 "예약어"를 구별해 보겠습니다. 그것들은 동일한 추상화 수준에 있지도 않고 완전히 다른 것입니다. 표준 영어 정의*로 시작:

운영자:작업을 나타내는 기호나 기능입니다.

("기호"는 "단일 문자"를 의미하지 않습니다.단어또한 상징입니다. )

작업:덧셈, 곱셈, 미분 등의 형식적 규칙에 따라 숫자, 수량, 수식 등을 변경하거나 조작하는 과정.

그게 분명하길 바라요? 여러분만의 몇 가지 예를 만들어 보세요. 제가 도와드리겠습니다.

그런 다음 "예약어"가 있고 실제로 "예약어"만 찾으면 됩니다.

예약됨:특정 목적이나 개인을 위해 예약됨

이 경우, 우리는 특정 목적을 위해 쉘 디자이너에 의해 예약되어 있고 다른 목적으로 사용될 수 없는 단어를 언급하고 있습니다(적어도 이스케이프하지 않고서는 안 됩니다).


알아채다이 용어는아니요서로 분리된 것들을 설명하세요. 즉,형식적인 규칙에 따라 표현식(또는 명령)에 대한 변경이나 작업을 나타내는 예약어입니다.

실제로 !파이프 이전의 "예약어"로사실은운영자표준 영어로만 정의된 이 파이프의 종료 상태입니다.

문제는 순전히 의미론적이며 그 차이는 특정 매뉴얼의 작성자가 생각하는 것만큼 중요하지 않습니다. 이 태그를 적용하면뒤쪽에디자인 사실과 라벨은 디자인에 포함된 특정 동작을 설명하는 데 사용됩니다.물건("예약어" 또는 "연산자")는 다른 단어에 비해 고유한 장점을 가지고 있습니다. 이것상표어떤 경우에는 장점이 있을 수 있지만 솔직히 말해서 이는 단지다른 것들. 그것들은 단지 두 가지 다른 용어일 뿐입니다.


특정 프로그램 의미:

과거를 대략적으로 살펴보면이 특정 매뉴얼, 이 질문의 핵심 용어는 실제로 다음과 같습니다.

  • 토큰
  • 단어
  • 메타 문자
  • 운영자
  • 제어 연산자
  • 예약어

이 순서를 따르세요.

내가 얻은 것:

단어는 메타 문자를 배치하여 다른 단어와 분리되어야 하는 것입니다. 연산자 자체는 "단어 구분 기호"(메타 문자)로 구성되므로 단어와 구체적으로 구분할 필요가 없습니다.


{...}(...)따라서 이 질문을 일으킨 용어를 사용하지 않고도 인용한 인용문에서 와 사이의 중요한 차이점 전체를 전달할 수 있습니다. 여기 하나 있어요고쳐 쓰기:

서브쉘을 생성하는 것 외에도 역사적 이유로 두 구성 사이에는 미묘한 차이가 있습니다. 중괄호는 공백이나 기타 쉘 메타 문자로 목록과 구분되어야 합니다. 괄호는 공백으로 목록과 구분되지 않더라도 쉘에서 별도의 토큰으로 인식됩니다.

전체적인 의미는 거기에 있습니다. 이것정의"연산자"와 "예약어"의 차이점 다른 차이점은 없습니다.


*정의는 New Oxford American Dictionary에서 가져왔습니다.

관련 정보