检查 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