[가 내장이고 [[가 키워드라면 ((?

[가 내장이고 [[가 키워드라면 ((?

에 따르면이 게시물, [내장되어 있으며 [[키워드입니다. 명령으로 간주될 수 있으므로 및 이후의 모든 항목은 명령 인수로 간주 [되며 최종 인수 와 [[만날 때까지 공백으로 구분해야 합니다.]]]

그런데 의 종류는 무엇입니까 ((?

type ((

오류가 발생합니다.

 bash: syntax error near unexpected token `('. 

나는 공백이 내부와 관련이 없다는 것을 발견했습니다 (( )).

echo $((1+1))
echo $(( 1+1))
echo $(( 1+1 ))
echo $(( 1+  1))
echo $(( 1  +  1  ))

모두 똑같아


요약

~에 따르면POSIX 표준 문서: 그룹화 명령 섹션

"(("로 시작하는 문자 시퀀스가 ​​앞에 '$'가 있으면 산술 확장으로 쉘에 의해 구문 분석되는 경우 "((표현식))"이 산술 표현식으로 평가되는 확장을 구현하는 쉘은 "(("는 그룹화 명령 대신 산술 평가로 도입되었습니다. 적합한 응용 프로그램은 쉘이 산술 평가를 수행하는 것을 방지하기 위해 두 개의 선행 '(' 문자를 공백으로 구분하는지 확인해야 합니다.

그리고 내부의 산술 평가 ((...))는 C 스타일을 따릅니다. 그래서 공간은 내부와 관련이 없습니다((...))

답변1

((말이 아닙니다. [및 와 달리 [[명령을 구성하는 단어 목록의 일부가 아닙니다. 그것을 생각하는 가장 좋은 방법은 구두점입니다. 실제로 이는 두 개의 구두점 문자로, 상황에 따라 단일 토큰으로 결합될 수도 있고 결합되지 않을 수도 있습니다. 그런 점 >&에서는 비슷한 것 같아요 ||. 구두점 문자는 쉘의 어휘 분석기/파서에 의해 임시 방식으로 처리됩니다.

((는 연산자의 절반이고 나머지 절반은 입니다 )). 그들은 함께 "outfix" 구문을 갖는 산술 표현식 연산자를 만듭니다. Bash와 같은 쉘 언어의 문법 구조는 전통적인 프로그래밍 언어 구문을 매우 깔끔하게 따르지 않습니다(예를 들어 구두점 문자는 문법적 맥락에 따라 의미가 있기 때문에 어휘 분석과 문법 구문 분석 사이에는 매우 강한 연관성이 있습니다). 항상 깔끔하게 맞는 단어는 아닙니다.

type셸의 어휘 분석기/파서가 작동하는 방식에 대한 정보가 아니라 간단한 명령에 나타날 수 있는 단어와 키워드에 대한 정보만 제공할 수 있습니다.

관련 정보