#!/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
도움이 되었기를 바랍니다.