$((40-35))가 5가 되는 이유는 무엇입니까?

$((40-35))가 5가 되는 이유는 무엇입니까?

이것 뒤에는 어떤 이상한 쉘 구문이 숨어 있으며 $((40-35))값을 어떻게 계산합니까?

예:

$> echo $((40-35))
5

답변1

bash매뉴얼 페이지 에서 :

  ((expression))
          The expression is evaluated according  to  the  rules  described
          below  under ARITHMETIC EVALUATION.  If the value of the expres-
          sion is non-zero, the return status is 0; otherwise  the  return
          status is 1.  This is exactly equivalent to let "expression".

그리고 더 나아가:

  Arithmetic Expansion
    Arithmetic expansion allows the evaluation of an arithmetic expression and
    the substitution of the result.  The format for arithmetic expansion is:

          $((expression))

이중 괄호 안에 입력하는 모든 내용은 bash평가할 수 있는 수학적 표현식이 됩니다.

답변2

이것은산술 확장. 모든 POSIX 쉘에서 지원됩니다(원본 Bourne 쉘에는 없음). 산술식의 구문은 기본적으로 C 언어의 구문과 동일합니다.

$산술 표현식에서는 변수를 사용하거나 사용하지 않고 사용할 수 있습니다 . 가 없으면 $변수는 변수를 나타내며 특히 echo $((a=4)) $a인쇄 등에 할당될 수 있습니다 4 4. 를 사용하면 $쉘은 간단한 텍스트 확장을 수행합니다. 예를 들어 a=2+2; echo $(($a))인쇄하는 4동안 a=2+2; echo $((a))오류가 발생합니다(그러나 일부 쉘에서는 4를 인쇄합니다).

$((명령 대체( $(command)여는 대괄호로 시작하는 명령) 또는 산술 표현식( )을 시작할지 여부를 결정하는 정확한 규칙은 $((expression))쉘마다 다릅니다. 명령 대체를 수행하고 명령이 (:로 시작하는 경우 안전을 위해 공백을 추가하십시오( $( (echo hello))이러한 명령은 드물기 때문에 실제 혼동 위험 없이 구문을 추가할 수 있습니다).

관련 정보