以正确的方式测试 bash 变量

Testing for a bash Variable the right way

我已经看到很多关于如何正确执行此操作的评论,但不知何故它对我不起作用,我不确定为什么,一些帮助将不胜感激。

示例代码:

#!/bin/bash
echo -en "\ec"
echo "."
#Dig MX Record
    DIG="$(which dig --skip-alias)"
    CurrentDomain="example.com"
    echo -n "${CurrentDomain} MX "
    CurrentMX="$(${DIG} ${CurrentDomain} MX +short)"
    readarray -t  ArrMX <<< "$CurrentMX";
    if [[ -n ${ArrMX[@]} ]]
    then
        printf '%s\n' "${ArrMX[@]}"
    else
        echo "No Entry"
    fi

如您所见,这只是循环遍历列表的程序的一部分,大多数值都有效,但是当 dig returns nothing 因为它没有 MX 条目时,我得到 MX:未绑定变量 但我做了 -z 测试...

有什么建议吗?

您在脚本的某处设置了 set -u,这会导致 shell 在插值时抛出错误。正如您在 dig 失败的情况下所说的那样,CurrentMX 变量未设置,当 尝试 read 命令中访问它时MX 之前明确地未设置它会抛出错误。

请注意,dig returns 当无法解析正确的主机时,结果为空。您可以通过 /usr/bin/dig example.com MX +short 进行检查,并在您 运行 与合适的主机进行比较时进行比较。

此外,您似乎在 read 命令中混淆了数组和变量的用法,read 命令的 -a 标志接受数组并且 不是一个变量。