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