检查 bash 脚本中的变量存在
Checking variable presence in bash script
我正在从 VMware Tools 检索主机名并尝试评估我的脚本中是否存在两个变量:
selection=2
# Check if hostname is present in guestinfo
hostname="$(vmtoolsd --cmd "info-get guestinfo.startup.hostname")"
if [[ "$selection" = 2 && ! -z ${hostname+x} ]]
then
echo "Args present."
else
echo "Args NOT present."
fi
无论是否在 VMX 配置文件中设置主机名值,if 语句 returns "Args present."
我相信这是因为执行了 vmtoolsd 命令,这意味着 'hostname' 变量不为空。不确定如何修复。
怎么了?
首先,清理你的测试——不要使用! -z,当你有一个 -n 时。
此外,如果您将 x 添加到主机名,它将始终为真(它总是 return x 本身)。 Bash 永远不需要 +x,去掉它。
if [[ "$selection" = 2 && -n $hostname ]]; then
echo "Args present."
else
echo "Args NOT present."
fi
我正在从 VMware Tools 检索主机名并尝试评估我的脚本中是否存在两个变量:
selection=2
# Check if hostname is present in guestinfo
hostname="$(vmtoolsd --cmd "info-get guestinfo.startup.hostname")"
if [[ "$selection" = 2 && ! -z ${hostname+x} ]]
then
echo "Args present."
else
echo "Args NOT present."
fi
无论是否在 VMX 配置文件中设置主机名值,if 语句 returns "Args present."
我相信这是因为执行了 vmtoolsd 命令,这意味着 'hostname' 变量不为空。不确定如何修复。
怎么了?
首先,清理你的测试——不要使用! -z,当你有一个 -n 时。
此外,如果您将 x 添加到主机名,它将始终为真(它总是 return x 本身)。 Bash 永远不需要 +x,去掉它。
if [[ "$selection" = 2 && -n $hostname ]]; then
echo "Args present."
else
echo "Args NOT present."
fi