5.3. Bash 변수는 타입이 없다(untyped)

Bash 는 다른 프로그래밍 언어들과는 달리, 변수를 "타입"으로 구분하지 않습니다. Bash 변수는 본질적으로 문자열이지만 Bash 가 문맥에 따라서 정수 연산이나 변수를 비교해 줍니다. 이 동작을 결정짓는 요소는 그 변수값이 숫자로만 되어 있는냐 아니냐 입니다.

예 5-4. 정수? 문자열?

#!/bin/bash
# int-or-string.sh
# 정수? 문자열?

a=2334                   # 정수.
let "a += 1"
echo "a = $a "           # 여전히 정수죠.
echo

b=${a/23/BB}             # 문자열로 변환.
echo "b = $b"            # BB35
declare -i b             # 정수로 선언해도 도움이 되질 않죠.
echo "b = $b"            # 여전히 BB35.

let "b += 1"             # BB35 + 1 =
echo "b = $b"            # 1
echo

c=BB34
echo "c = $c"            # BB34
d=${c/BB/23}             # 정수로 변환.
echo "d = $d"            # 2334
let "d += 1"             # 2334 + 1 =
echo "d = $d"            # 2335

# Bash 의 변수는 본질적으로 타입이 없습니다(untyped).

exit 0

변수의 타입이 정해져 있지 않다는 것은 축복일수도 있고 재앙일수도 있습니다. 스크립트를 짤 때 충분히 여러분 마음대로 할 수 있는 유연함을 주고, 코드를 짤 때 고생을 덜 하게도 하지만, 알지 못하는 에러가 생길 수도 있으며 적당하게 프로그래밍하는 습관에 물들 수도 있습니다.

Bash 가 이 일들을 해 주지 않기 때문에, 프로그래머가 스크립트에서 쓰이는 변수가 어떤 타입인지 계속 기억하고 있어야 합니다.