"$(())" 명령의 출력이 0인 이유는 무엇입니까?

"$(())" 명령의 출력이 0인 이유는 무엇입니까?

명령 을 사용했는데 $(())다음 오류가 표시되었습니다.

bash: 0: command not found

이 오류는 왜 발생합니까?

답변1

이는 $(( ))산술 치환 또는 산술 확장입니다. 여기에서 (정수) 산술 연산을 수행할 수 있으며 쉘은 이를 실행하고 전체 표현식을 이러한 연산의 결과로 대체합니다.

이렇게 사용하는 경우를 자주 볼 수 있습니다

count=$(( count + 1 ))

여기서 쉘은 아무 작업도 수행하지 않으므로(산술 대체는 널임) 쉘 bash은 결과를 0으로 결정합니다.

이를 명령으로 사용하고 있습니다. 즉, 쉘이 0결과를 명령으로 실행하려고 시도한다는 의미입니다.

실패하고 이유를 알려줍니다("0: 명령을 찾을 수 없음").


이는 빈 산술 대체이며 다른 쉘에서 다르게 처리되는 극단적인 경우인 것 같습니다. and ( OpenBSD에서)가 bash있는 쉘은 실행을 시도하고 , while 및 불평합니다:zshpdkshksh0dashyash

$ dash -c '$(( ))'
dash: 1: arithmetic expression: expecting primary: " "
$ yash -c '$(( ))'
yash: arithmetic: a value is missing

이것POSIX 표준설명하다

확장으로서 쉘은 나열된 것 이상의 산술 표현식을 인식합니다.

...이것은 bash, zshpdksh.(즉, 빈 표현식을 "0"으로 인식함)의 함수일 수 있습니다.

관련 정보