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