`]`의 토큰 식별자는 무엇입니까?

`]`의 토큰 식별자는 무엇입니까?

Bash 매뉴얼은 다음과 같이 말합니다:

[ 형식을 사용하는 경우 명령의 마지막 매개변수는 ]여야 합니다.

$ type [
[ is a shell builtin
$ type ]
bash: type: ]: not found

따라서 ]예약어, 연산자 또는 내장 명령이 아닙니다.

토큰으로서 의 토큰 식별자는 무엇입니까 ]? 단어인가, 이름인가?

답변1

]보수는 명령의 끝 기호 [입니다 .[

man페이지에서 지적했듯이 이는 실제로 인수이지만 구체적 [으로 [결말로 처리됩니다.

;와 같은 다른 명령 종료 모드와 유사하게 생각할 수 있습니다 find .. exec.

답변2

[Bash는 또는 ]문자 자체를 알파벳 문자와 다른 것으로 취급 하지 않습니다 .

이 경우 bash는 "단어"인 을 보고 [해당 이름을 가진 명령을 찾습니다. 파일 시스템을 살펴보면 /bin/[(또는 /usr/bin/[)이 실행 파일로 존재한다는 것을 알 수 있습니다. 공교롭게도 bash는 효율성을 위해 내장 버전도 제공하지만 이는 단지 구현 세부 사항일 뿐입니다.

해당 이름을 가진 실행 파일과 같은 명령 [에는 전달된 마지막 인수가 이어야 한다는 규칙이 있습니다. ]그렇지 않으면 오류가 발생합니다. 이는 부분적으로 미학적으로 보기 좋기 때문일 수도 있지만 실수로 잘린 명령으로부터 사용자를 보호해 주는 것도 좋은 일입니다.

사실은 이것들이특별하지 않은[그렇기 때문에 or 앞뒤의 공백은 생략할 수 없습니다 ].


예외:

  • []같은 단어가 올바른 형식으로 나타나는 경우 (예 [a-z]: )특수 및 bash 와일드카드 규칙이 적용됩니다.
  • [[명령[특별하고 할 수 없는 많은 일을 할 수 있습니다 (그리고 내부 인수는 [[ .. ]]일부 개행 문자와 마찬가지로 다르게 처리됩니다). 해당하는 것도 ]]매우 특별한데, 쉘 예약어이기 때문에 명령어 이름이 될 수 없고 키워드 다음에 특수 처리를 종료하기 때문이다 [[.

답변3

처음 두 답변보다 더 간단하게 실행해야 하는 문자열입니다 ].[

관련 정보