#!/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-
意味着当变量未设置时使用空值。
答案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
希望这可以帮助。