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