2014-03-13 2 views
11

쉘 스크립팅을 처음 배웠을 때 많은 예제에서 기본 산술을 위해 let을 사용했지만 나중에 일부 환경에서는 let이 내장되어 있지 않음을 알았습니다 , 대신에 expr의 사용을 지원합니다 (상당히 느리지 만).대 쉘 대 double 대괄호 대입

그러나 대부분의 쉘에서 이중 괄호를 사용하여 산술 연산을 수행 할 수도 있습니다 (예 : $((54 + 102))).

나는 이식성을위한 스크립트를 작성하고 있으므로, 이것은 가능성의 지평을 제시한다. 현재 두 개의 서로 다른 래퍼 함수 (let에 하나, expr에 하나)를 사용하고 있으며 나머지 스크립트에서 어느 것을 사용할 지 결정하는 빠른 테스트를 사용하고 있습니다.

어쨌든, 내가 알기를 원하는 것은 누군가이 3 가지 산술 명령 (및 내가 놓친 다른 모든 것들)의 호환성을 명확히 할 수 있는지 여부입니다. 더블 괄호 형식이 일반화되어 호환성 검사를 수행 할 수 있기를 기대하지만 검색하기가 어렵 기 때문에 여기에 와서 확실히 알아보기로했습니다.

나는 단지 정규 산수에만 관심이 있다고 생각하는데, 나는 이미 내가 (필요로 할) 몇 가지 큰 정수를 다루었다고 생각한다.

+0

셸 == bash? –

답변

6

$((...))은 POSIX 표준에 정의되어 있으며 필요에 따라 이식성이 뛰어납니다.

+0

흠,이 경우 항상 POSIX 표준을 따르고 있습니까? POSIX와 호환되지 않는 일반적인 셸 환경이 있습니까? 이중 괄호가 실질적으로 모든 일을하지만 훨씬 더 빠르다면 우리는'expr'을 가질 것이라는 이상한 것처럼 보입니다. – Haravikk

+2

'expr'은 쉘이 가장 기본적인 기능을 제외한 모든 기능을 구현할 외부 프로그램으로 남긴 시점부터 POSIX 표준을 선행합니다. 나의 이해는 솔라리스가 기본 시스템 쉘로 Bourne 쉘 (동일하게 명명 된 POSIX 쉘이 아닌 원래'sh')을 사용하지만'/ bin/sh'로 설치되지 않고 일부에서는 POSIX 쉘을 사용할 수 있음을 이해합니다. 경로 이름. – chepner