bash - 以正确的方式测试 bash 变量
问题描述
我已经看到很多关于如何正确执行此操作的评论,但不知何故它对我不起作用,我不知道为什么,将不胜感激。
示例代码:
#!/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 没有返回任何内容时,因为它没有 MX 条目,我得到MX: unbound variable但我做了 -z 测试.. .
有什么建议么?
解决方案
您在脚本中的某个位置设置set -u
了这会导致 shell 在插入错误时抛出错误。正如您在dig
失败的情况下所说的那样,该CurrentMX
变量未设置,并且当尝试在先前未明确设置的read
命令中访问它时,它会引发错误。MX
请注意,dig
当它无法解析正确的主机时,它会返回一个空结果。您可以通过在/usr/bin/dig example.com MX +short
使用适当的主机运行时进行检查并进行比较来检查它。
此外,您似乎混淆了命令中数组和变量的使用,read
命令的-a
标志read
接受数组而不是变量。
推荐阅读
- flutter - 如何在颤振多模块项目中注入依赖项
- regex - 如何确保分隔符之间的完整字符串符合正则表达式模式?
- c - 用C计算程序的执行时间
- c++ - 简单 c++ for 循环的预期最大指令吞吐量
- google-chrome - Puppeteer 回答屏幕共享弹出窗口
- java - 如何解析泛型类型的Java注释?
- python - 根据输出级别将输出流式传输到不同的记录器
- bamboo - Bamboo 是否会在创建管道时支持 AWS SAM 或 AWS CDK
- python - 正则表达式 a^xb^y 替换
- vue.js - 为什么在使用 axios.post 时我的页面上有一个 OBJECT PROMISE