이것 뒤에는 어떤 이상한 쉘 구문이 숨어 있으며 $((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))
이러한 명령은 드물기 때문에 실제 혼동 위험 없이 구문을 추가할 수 있습니다).