Linux/Shell Script

[Shell Script] Variables - 2

비번변경 2022. 6. 28. 21:41

Variables

2022.06.27 - [Shell Script] Variables - 1 글에 이어서 작성한다.

 

 

Variable states

변수는 3가지 상태를 가질 수 있다.

 

1.  변수 없음 또는 unset

변수에 값을 대입한 적이 없는 상태로 아래 명령어로 선언만 했거나 unset 명령을 사용한 경우에 해당된다.

declare <VARIABLE>

local <VARIABLE>

 

2. 값이 NULL인 경우

<VARAIABLE>=
<VARAIABLE>=""
<VARAIABLE>=''

 

3. 값이 NULL 이외인 경우

<VARAIABLE>=123
<VARAIABLE>=" "
<VARAIABLE>='hello, world'

 

값 구분하기

조건문 if를 사용하면 값을 가진 상태와 가지지 않은 상태를 구분할 수 있다.

 

값이 없는 경우

test -v <VARIABLE>; echo $?;
💡 test 명령
파일 형식 또는 값을 비교한다.

 

값이 없거나 NULL인 경우

test -z <VARIABLE>; echo $?;
# -z : 문자열 길이가 0인 경우 참

 

값이 있는 경우

test -n <VARIABLE>; echo $?;
# -n : 문자열 길이가 0이 아닌 경우 참

 

 

특징

대입 연산 시 변수 이름에 변수 사용

대입 연산은 변수 확장 전에 처리되기 때문에 기본적으로 변수 이름에는 변수를 사용할 수 없다. 단, eval, let, local, export와 함께 사용하는 경우에는 가능하다.

# 오류
for (( i=1; i<=5; i++ )) do AA$i=$(($i * 100)); done

# 정상
for (( i=1; i<=5; i++ )) do declare AA$i=$(($i * 100)); done

대입 연산 시 변수 이름에 변수 사용

 

변숫값으로 NUL 문자(\0)를 저장할 수 없다.

NUL문자는 변수 값으로 할당할 수 없으나, pipe로 전달하거나 file로는 저장할 수 있다.

 

Subshell과 스크립트 파일에서 현재 shell의 변숫값을 변경할 수 없다.

Subshell과 스크립트 파일은 현제 shell과는 다른 프로세스에서 실행된다. 따라서 현재 쉘에 정의된 변수를 다른 프로세스에서 사용하더라도 현재 쉘에 정의된 변수의 값은 변경되지 않는다.

 

 

참고 문서

https://mug896.github.io/bash-shell/variables.html

 

 

728x90