문제

방금 Bash 구문을 우연히 발견했습니다.

foo=42
bar=$[foo+1] # evaluates an arithmetic expression

내가 이것을 위해 Googled를 보았을 때, 나는 발견했다 http://tldp.org/ldp/bash-beginners-guide/html/sect_03_04.html#sect_03_04_05:

3.4.6. 산술 확장

산술 확장은 산술 표현의 평가와 결과의 대체를 허용합니다. 산술 확장 형식은 다음과 같습니다.

$(( EXPRESSION )) 

...

가능한 한 Bash 사용자는 정사각형 괄호와 함께 구문을 사용해야합니다.

$[ EXPRESSION ] 

그러나 이것은 표현의 결과 만 계산하고 테스트를 수행하지 않습니다 ...

내 배쉬 맨 페이지에서 나는 $(( EXPRESSION )) 다음과 같은 양식

foo=42
bar=$((foo+1)) # evaluates an arithmetic expression

따라서 어떤 테스트가 수행되지 않습니다 $[...] 그와 관련이 있습니다 $((...)), 또는입니다 $[...] 레거시 버전 $((...))?

도움이 되었습니까?

해결책

Bash v3.2.48의 인공 매지지는 말한다 :

...] 산술 확장 형식은 다음과 같습니다.

     $((expression))

그만큼 기존 형식 $ [expression]은 더 이상 사용되지 않습니다 다가오는 버전의 Bash에서 제거됩니다.

그래서 $[...] 더 이상 사용해서는 안되는 오래된 구문입니다.

다른 팁

@sth는 전적으로 정확합니다. 그리고 더 많은 장황 구문이 왜 선호되는지 궁금한 경우 메일 링리스트 에서이 오래된 이메일을 확인하십시오.

http://lists.gnu.org/archive/html/bug-bash/2012-04/msg00033.html

“초기 제안에서 $ [Expression] 양식이 사용되었습니다. 그것은 현재 텍스트의 "$ ())와 기능적으로 동일했지만 1988 년 Kornshell은 이미"$ (()) "을 구현했다는 반대 의견이 제출되었으며 또 다른 구문을 발명 할 강력한 이유는 없었습니다. 또한 "$ []구문에는 사례 명세서의 패턴과 관련된 작은 비 호환성이있었습니다. "

나는 이론적 근거를 좋아한다고 확신하지 못하지만“누군가가 이미 더 불쾌하게 해왔다”고하지만, 당신은 그것을 가지고있다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top