~에 따르면이 게시물, [
내장 함수이며 [[
키워드입니다. 명령으로 처리될 수 있으므로 및 [
이후의 모든 항목은 [[
명령 인수로 처리되며 최종 인수를 만족할 때까지 공백으로 구분해야 합니다 ]
.]]
그런데 종류가 뭔가요 ((
?
type ((
오류를 보고합니다:
bash: syntax error near unexpected token `('.
나는 공백이 그것과 관련이 없다는 것을 알았습니다 (( ))
.
echo $((1+1))
echo $(( 1+1))
echo $(( 1+1 ))
echo $(( 1+ 1))
echo $(( 1 + 1 ))
그것은 동일합니다
일반화하다
~에 따르면POSIX 표준 문서: 명령 섹션 그룹화
"(("로 시작하는 문자 시퀀스가 셸에서 산술 확장("$"가 앞에 오는 경우)으로 구문 분석되는 경우 확장을 구현하는 셸은 "((expression))"을 산술 표현식으로 평가할 수 있습니다. "( ( "는 그룹화 명령이 아닌 산술 평가로 도입되었습니다. 호환 응용 프로그램에서는 쉘이 산술 평가를 수행하지 못하도록 두 개의 선행 '(' 문자를 공백으로 구분해야 합니다.
그리고 내부 산술 평가는 ((...))
C 스타일을 따릅니다. 그래서 공간은 인테리어와 아무 관련이 없습니다((...))
답변1
((
한마디도 아닙니다. [
및 와 달리 [[
명령을 구성하는 단어 목록의 일부가 아닙니다. 그것을 생각하는 가장 좋은 방법은 구두점입니다. 실제로 문맥에 따라 단일 기호로 결합될 수도 있고 결합되지 않을 수도 있는 두 개의 구두점입니다. 이 점에서는 및 와 유사합니다 >&
. ||
쉘의 어휘분석기/파서는 특별한 방법으로 구두점을 처리합니다.
((
는 연산자의 절반이고 나머지 절반은 입니다 ))
. 이들은 함께 "outfix" 구문을 갖는 산술 표현식 연산자를 형성합니다. Bash와 같은 쉘 언어의 구문 구조는 전통적인 프로그래밍 언어의 구문을 매우 깔끔하게 따르지 않습니다. (예: 구두점의 의미는 구문 컨텍스트에 따라 달라지므로 어휘 분석과 구문 분석 사이에는 매우 긴밀한 연결이 있습니다. ), 따라서 항상 매우 적절한 단어는 아닙니다.
type
셸의 어휘 분석기/파서가 작동하는 방식에 대한 정보가 아니라 간단한 명령에 나타날 수 있는 단어와 키워드에 대한 정보만 제공할 수 있습니다.