以正确的方式测试 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
标志接受数组并且 不是一个变量。
我已经看到很多关于如何正确执行此操作的评论,但不知何故它对我不起作用,我不确定为什么,一些帮助将不胜感激。
示例代码:
#!/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
标志接受数组并且 不是一个变量。