9.7. 이중소괄호(The Double Parentheses Construct)

let 명령어와 비슷하게 ((...)) 도 산술 확장과 계산을 할 수 있습니다. a=$((5 + 3)) 같은 간단한 형태의 식은 "a""5 + 3"인 8로 만들어 줍니다. 어쨌든 이 이중소괄호는 C 형태의 변수 조작을 가능하게 해주는 메카니즘입니다.

예 9-22. C 형태의 변수 조작

#!/bin/bash
# ((...)) 를 써서 C 형태로 변수 조작하기.


echo

(( a = 23 ))  # "=" 양쪽에 빈 칸을 두어 변수 세팅하기, C 형태.
echo "a (initial value) = $a"

(( a++ ))     # 'a'를 후위증가, C 형태.
echo "a (after a++) = $a"

(( a-- ))     # 'a'를 후위감소, C 형태.
echo "a (after a--) = $a"


(( ++a ))     # 'a'를 전위증가, C 형태.
echo "a (after ++a) = $a"

(( --a ))     # 'a'를 전위감소, C 형태.
echo "a (after --a) = $a"

echo

(( t = a<45?7:11 ))   # C 형태의 3중 연산자.
echo "If a < 45, then t = 7, else t = 11."
echo "t = $t "        # 되네요!

echo


# -----------------------------
# 이스터 에그(Easter Egg) 경고!
# -----------------------------
#  Bash에는 ksh에서 많은 부분을 따온 C 형태의 연산자가 
#+ 문서화되지 않은 형태로 많이 존재합니다.
#  Bash 문서에서는 ((...)) 를 쉘 연산이라고 합니다만,
#+ 그 이상의 것이 존재합니다.
#  비밀을 밝혀서 미안해요, Chet.

# ((...)) 를 쓴 "for", "while" 루프도 참고하세요.

# 이 이스터 에그들은 Bash 버전 2.04 이후에서만 동작합니다.

exit 0

예 10-11 참고.