본문 바로가기
Linux

[zsh] 변수 여부 체크하고 없으면 다른 값 할당하기 : ${val0:-val1}

by ds31x 2023. 10. 25.

zsh 등의 shell script에서 다음과 같은 형태로 변수할당이 되는 경우가 있음.

rval=${ZDOTDIR:-$HOME}

이 경우, ZDOTDIR 란 변수가 비어있지 않은 경우에는 rvalZDOTDIR과 같은 값을 가지게 된다.

  • rval=$ZDOTDIR 과 같은 결과.
  • 변수가 비어있다는 뜻은 empty 문자열이거나 undefined인 경우를 가르킴.

하지만, ZDOTDIR 란 변수가 비어있는 경우엔 HOME이라는 변수의 값이 할당된다. 즉 다음과 같은 결과임.

  • rval=$HOME

 


다른 유용한 할당방법으로는 :=이 있음.

이는 기존에 할당이 되어있는지를 체크하여 기존에 값을 가진 경우는 그대로 유지하고,
비어있는 경우에만 할당을 수행한다.

echo "${VAR1:=default}"
  • VAR가 이전에 할당된 경우에는 그 값을 그대로 유지.
  • VAR이 이전에 정의안된 경우나 빈문자열을 값으로 가진 경우, default 문자열을 값으로 가지게 됨.

다음의 script는 사용법을 간략히 보여줌.

#!/bin/env bash
t=predefined
echo ${t:=new_value}

unset t
echo ${t:=new_value}

결과는 다음과 같음.

predefined
new_value

다음의 표는 위의 방법들을 포함하여 다른 다양한 방법을 정리한 것임.


References

https://web.archive.org/web/20200309072646/https://wiki.bash-hackers.org/syntax/pe#parameter_expansion

 

Parameter expansion [Bash Hackers Wiki]

One core functionality of Bash is to manage parameters. A parameter is an entity that stores values and is referenced by a name, a number or a special symbol. Parameter expansion is the procedure to get the value from the referenced entity, like expanding

web.archive.org

https://unix.stackexchange.com/questions/122845/using-a-b-for-variable-assignment-in-scripts

 

Using "${a:-b}" for variable assignment in scripts

I have been looking at a few scripts other people wrote (specifically Red Hat), and a lot of their variables are assigned using the following notation VARIABLE1="${VARIABLE1:-some_val}" or some exp...

unix.stackexchange.com