Bash에서 변수 선언하기
변수(variable)란 데이터를 담는 그릇으로 이해할 수 있다. 변수에 어떤 데이터를 저장하도록 명령하면 해당 변수에 데이터가 저장된다. 변수에 저장된 데이터는 변수의 이름으로 사용할 수 있다. 변수에 저장하는 데이터는 보통 값이라고 한다.
Bash에서 변수에 값을 저장하는 방법은 간단하다. 등호(=)를 기준으로 왼쪽에는 변수의 이름을 적고, 오른쪽에는 저장할 값을 적는다. 등호의 좌우에는 공백이 없어야 한다. 변수에 값을 저장하는 것을 할당한다고 한다.
변수_이름=값
NEW_VARIABLE이라는 변수에 hello라는 문자를 저장하려면 다음과 같이 작성한다. 값은 큰따옴표(")나 작은따옴표(')로 감싸도 되고, 감싸지 않아도 된다. 큰따옴표로 감싸는 것이 일반적이다. 값을 큰따옴표나 작은따옴표로 감싸는 것을 쿼팅(quoting)이라고 한다.
변수 이름을 지을 때는 다음과 같은 규칙을 따른다.
- 언더스코어(_)를 제외한 모든 특수 문자는 변수 이름으로 사용할 수 없다.
- 변수 이름은 대소문자를 구분한다.
- 변수 이름에 숫자를 사용할 수 있으나 영문자 또는 언더스코어(_)로 시작해야 한다.
Bash에서 변수 사용하기
변수를 사용한다는 것은 변수에 저장된 값을 사용하겠다는 뜻이다. 여러 변수가 있을 때 각 변수를 식별하려면 변수별로 ID가 있어야 한다. 변수의 ID는 변수의 이름이다. 그래서 변수를 사용하려면 변수의 이름을 특정해야 한다.
변수를 사용할 때는 변수 이름을 중괄호({})로 묶고 가장 앞에 달러($)를 붙인다. 더 간략하게 표시하려면 중괄호를 생략하고 변수 이름 앞에 달러 기호($)만 붙여도 된다.
VAR="value"
echo ${VAR}
VAR 변수에 저장된 값은 echo 명령어를 통해서 출력할 수 있다. 중괄호를 생략하고 간단히 표시할 수도 있다. 하지만 중괄호를 생략할 때 유의할 점이 있다. 중괄호를 묶지 않은 변수 표기법을 사용하면 Bash가 변수 이름을 추정하게 된다. 이때 의도치 않게 잘못 해석되는 경우가 있다.
echo $worldIsMine
echo ${world}IsMine
world 변수의 값인 'Banana'와 'IsMine'이 붙어 'BananaIsMine'이 출력되기를 기대했지만, 아무런 값도 출력되지 않는다. 이는 $ 다음에 중괄호가 없으면 Bash가 변수 이름으로 추정하기 때문이다. 이 경우 worldIsMine이라는 이름의 변수를 찾는다. 그러나 worldIsMine이라는 변수는 정의되지 않았으므로 아무런 값도 출력되지 않고 빈 줄만 출력한 것이다. 원래 의도대로 출력하려면 world 변수를 중괄호로 묶어줘야 한다.
변수의 데이터 타입
Bash는 변수에 데이터 타입이 없다. 모든 데이터는 문자열로 처리된다. VAR=123이라고 저장하면 문자열 123이 저장된다. 그렇다면 Bash에서는 변수로 산술 연산을 할 수 없는 것일까? 아니다. 산술 연산을 지원하는 기능을 사용하면 된다. 산술 연산을 수행하도록 명령할 때만 문자열을 숫자로 취급한다고 볼 수 있다.
- a 변수에 1을 저장한다.
- b 변수에는 a 변수의 값에 1을 더한 값을 저장한다.
- b 변수 출력
a=1
b=$a+1
echo $b
b=${a}+1
echo $b
Bash는 모든 변수를 문자열로 해석하기 때문에 우리가 원하는 2이라는 결과가 나오지 않는다. 2를 얻기 위해서 산술연산을 해야하는데, 가장 쉬운 방법은 let 명령어를 사용하는 것이다.
let "표현식"
표현식 부분에 변수를 포함한 산술 연산식을 넣는다. 이때 변수 이름 앞에 달러 기호($)를 붙이지 않는다. 변수에 값을 저장할 때와 달리 등호 앞뒤로 공백이 있어도 괜찮다. 그리고 표현식 전체를 큰따옴표나 작은따옴표로 감싸준다.
a = 1
let "b = a + 1"
echo $b
let "b = b * 2"
echo $b
let 명령어 대신 expr 명령어를 사용하는 방법도 있다. expr 명령어는 다음과 같이 사용한다.
expr 표현식
expr 명령어는 산술 연산은 물론 문자열 연산, 논리 연산 등 다양한 연산을 수행할 수 있다. expr 명령어는 표현식 전체를 큰따옴표로 감싸지 않는다. 표현식 부분에 연산식을 넣을 때는 변수 이름 앞에 달러 기호를 붙인다. 그리고 변수와 연산 기호는 띄어 쓴다.
a=8
b=2
expr $a + $b
expr $a - $b
expr $a / $b
expr $a * $b
실행해 보면 덧셈, 뺄셈, 나눗셈까지는 문제없이 잘된다. 하지만 곱셈에서 다음과 같이 이상한 에러가 발생하는 경우가 있다. 이것은 곱하기를 의미하는 *(asterisk)를 다르게 해석하기 때문이다. *는 보통 곱셈 기호로 사용하지만, 현재 디렉터리의 모든 파일 이름을 치환하는 의미로도 사용한다. *를 명확하게 곱셈 기호로 사용하려면 * 앞에 백슬래시(\)를 붙여줘야 한다. 백슬래시 바로 뒤에 오는 문자는 문자 그대로 해석한다. 그래서 * 앞에 백슬래시를 붙이면 파일 이름으로 치환하지 않고 곱셈 기호 그대로 사용한다.
이스케이프 문자(Escape Character)에 대해서
이스케이프 문자이스케이프 문자(escape character)는 특수한 기능을 수행하는 문자로, 화면에 출력되는 문자가 아니라 문자 출력을 제어하는 문자이다. 대부분의 프로그래밍 언어나 셸에서는 백슬
jettstream.tistory.com
expr $a \* $b
expr 명령어의 실행 결과를 변수에 저장할 수도 있다. 값을 $( )로 감싸서 변수에 저장하면 된다. 이를 명령어 치환이라고 한다.
expr $a + $b
result=$(expr $a + $b)
echo $result
정리하자면
- 변수 선언 : a=1
- 변수 사용 : $a 또는 ${a}
- 산술연산자 사용 : let 또는 expr 사용해서 산술연산
'프로그래밍 > 리눅스' 카테고리의 다른 글
Bash 프로그래밍 - if 문 형식 및 예제 (0) | 2025.03.18 |
---|---|
리눅스 필수 커맨드라인 툴 read (0) | 2025.03.04 |
리눅스(Linux) 패키지 관리 시스템에 대해서 (0) | 2025.02.17 |
리눅스에서 압축을 해보자! 필수 커맨드라인 tar 명령어 (0) | 2025.02.14 |
리눅스 필수 커맨드라인 툴 du (0) | 2025.02.14 |
댓글