셸 스크립트: 변수(variable)와 상수(constant)
셸 스크립트에서 변수란 단어가 가진 의미는 변할 수 있는( variable) 값이다. 또 상당수의 애플리케이션에서 변수가 이와 같은 의미로 사용되고 있다.
상수(constant)는 이름이 정의되고 값이 지정된다는 점은 변수와 같다. 하지만 그 값은 변하지 않는다는 점이 다르다.
쉘은 변수와 상수를 따로 구분하지 않는데 용어를 구분하는 이유는 쉘 이용자의 편의를 위해서이다.
1. 변수(variable)
앞서 말했듯이 변수가 가진 의미는 변할 수 있는 값이다.
1.1 변수할당문: 변수명과 변수값
변수할당문
variable=value
variable는 변수 이름(변수명), value는 문자열이 들어간다.
변수할당문에서 변수명, 등호(=), 변수값에는 빈칸이 없어야 하며, 변수명은 영문자, 언더바(_), 숫자만 들어가며 영문자 대소문자를 구분한다.
#!bin/bash
g=good
gm="good morning" # 빈칸은 따옴표, 쌍따옴표 안에서만 사용 가능하다.
echo $g, $gm
----- ----- ----- ----- ----- ----- or ----- ----- ----- ----- ----- -----
#!bin/bash
g=good gm="good morning" # 한 줄에 여러 변수도 설정할 수 있다.
echo $g, $gm
먼저 셔뱅 설정을 하고 good 문자열을 변수 g에 할당한다. good morning 문자열은 변수 gm으로 할당되었다. 그리고 쌍따옴표를 사용해서 빈칸도 같이 인식할 수 있게 설정했다.
저장했던 변수할당문(oo.sh)의 퍼미션을 700으로 맞춰 준 후에 실행시키면 아래와 같이 나옴을 알 수 있다. 쌍 따옴표가 빈칸도 인식하게 해 준 것을 알 수 있다.
]# ./oo.sh
good, good morning
1.2 명령어 결과: 변수 값 할당
명령어 결과를 변수 값으로 할당한 경우이다.
c=$(ls -l oo.txt)
2. 상수 선언
상수(constant)는 이름이 정의되고 값이 지정된다는 점은 변수와 같지만 값이 변하지 않는다는 점이 다르다고 언급했다.
보통 상수를 정의할 때는 대문자로, 그리고 변수를 정의할 때는 소문자를 사용한다.
readonly FILENAME="hello.txt"
declare -r filename="hello.txt"
readonly 명령어를 사용하여 상수를 사용할 수 있게 설정하고 대문자로 표시한 FILENAME이 상수이다. readonly 명령어 외에도 ‘declare -r’ 명령어를 사용할 수 있다.