"set -u"를 설정할 때 변수가 -z로 설정되어 있는지 Bash 확인하시겠습니까?

"set -u"를 설정할 때 변수가 -z로 설정되어 있는지 Bash 확인하시겠습니까?
#!/usr/bin/env bash
set -euo pipefail


if [ -z "$BUILD_DATE" ]; then
  export BUILD_DATE="$(date +%s%N)"
  echo "???"
else 
  echo "!!!!!!!"
fi

위의 내용은 오류가 발생했기 때문에 아무것도 인쇄하지 않습니다: env/local-testing.sh:22: BUILD_DATE: parameter not set.

set +u조건을 실행하고 set -u다시 순환시키는 것 외에 다른 옵션이 있습니까?

답변1

실행 중이고 set -u변수가 있는 경우가능한설정되어 있지 않으며 비어 있는지 테스트해야 합니다 -z. 그런 다음 사용할 수 있습니다.

if [ -z "${BUILD_DATE:-}" ]; then

"${BUILD_DATE:-}"할 것이다빈 문자열로 확장BUILD_DATE변수가 비어 있거나 설정되지 않은 경우 .

답변2

기본 비어 있는 값을 사용하십시오.

if [ -z "${BUILD_DATE-}" ]; then

바라보다매개변수 확장존재하다 man bash. just를 사용한다는 -것은 변수가 설정되지 않은 경우 null을 사용한다는 의미입니다.

답변3

매개변수 확장 버전은 훌륭하지만 기억하기 어렵습니다. Raspbian Buster(Debian)의 bash 5.0.3(1)에서 -v를 사용하여 테스트하면 잘 작동했습니다.

#!/bin/bash
set -euo pipefail
a=1
if [[ -v a ]]; then echo "a is set with value $a"; else echo "a is not set"; fi
unset a
if [[ -v a ]]; then echo "a is set with value $a"; else echo "a is not set"; fi
echo "ends"

산출

a is set with value 1
a is not set
ends

도움이 되었기를 바랍니다.

관련 정보