Bash 산술에서 쉼표 연산자는 어떤 역할을 합니까?

Bash 산술에서 쉼표 연산자는 어떤 역할을 합니까?

Bash 매뉴얼, 섹션 6.5 쉘 산술

expr1 , expr2
comma

쉼표 연산자는 무엇을 합니까?

expr1expr2sum은 산술식 인가요 ?

답변1

,목록 연산자입니다.

산술 표현식 목록은 왼쪽에서 오른쪽으로 평가되며 마지막 표현식 결과가 반환 값이 됩니다.

$ echo "$(( a=1, ++a, ++a ))"
3

bash-2.04-devel에 목록 ,연산자가 추가되었습니다(사전/사후 증가/감소 연산자와 함께).

당신은 읽고 싶을 수도 있습니다expr.c다른 연산자의 구현 방법과 해당 기능을 확인하세요.expcomma(),운영자를 위해 .

답변2

불다

쉼표 연산자는 LESS=+/'expr1 , expr2' man bashbash( )에서 작동합니다.

expr1, expr2
쉼표

그 목적에 대해서는 다른 설명이 없습니다.
이를 위해 우리는 읽어야합니다"C 언어"(모든 산술 연산자의 탄생지)에 대한 설명.

예(위 링크에 표시됨)(두 번째 값은 5임):

$ echo "$(( (t=3, t+2) )) $t"
5 3

또는 더 간단하게:

$ echo "$(( t=3, t+2 )) $t"
5 3

예, 각 요소를 쉼표로 구분하세요.표현일 수도 있다:

1313    expression:
            assignment-expression
            expression , assignment-expression

POSIX

실제로 POSIX아니요쉼표 연산자를 포함합니다.
표: 선택된 ISO C 표준 연산자 및 제어 흐름 키워드

아니면 다음을 시도해 보세요.

$  dash -c 'echo $(( t=3,t+2 ))'
dash: 1: arithmetic expression: expecting EOF: " t=3,t+2 "
$  bash -c 'echo $(( t=3,t+2 ))'
5

IBM이 보고서에서 확인한 바와 같이AIX 및 POSIX 쉘 페이지(강조):

모든 적분 연산자,밖의... 및 쉼표(,)가 지원됩니다.

그러나 AIX에서도 IBM은 쉼표 연산자를 지원한다고 주장합니다.ksh93 쉘에서/usr/bin/ksh93

단항 +, ++, -- 및 ?: 구문(예: "x ? y : z")과 ,(쉼표) 연산자를 포함하여 더 많은 산술 연산자를 사용할 수 있습니다.

결론적으로:

dash, ksh   do not have a comma operator.
ksh93          may have a comma operator.
bash, zsh   do     have a comma operator.

관련 정보