Bash 中 elif 语句的变量赋值被破坏

Bash 中 elif 语句的变量赋值被破坏
#!/bin/bash
if [[ $(which yum) ]]; then
   OS="CentOS"
elif [[ $(which apt) ]]; then
   OS="Debian"
elif [[ $(which apk) ]]; then
   OS="Alpine"
elif [[ $(which zypper) ]]; then
   OS="OpenSuse"
elif [[ $(which pacman) ]]; then
   OS="Arch"
elif [[ $(which dnf) ]]; then
   OS="Fedora"
else
   IS_UNKNOWN=1
fi
echo "$IS_UNKNOWN"
suse="OpenSuse"
alpine2="Alpine"
cent="CentOS"
redhat="Fedora"
deb="Debian"
pacman="Arch"
if (( OS==suse ))
then 
    export package_manager="zypper install -y"
elif (( OS==alpine2 ))
then 
    export package_manager="apk --update add"
elif (( OS==cent ))
then 
    export package_manager="yum install -y"
elif (( OS==redhat ))
then 
    export package_manager="dnf install -y"
elif (( OS==pacman ))
then
    export package_manager="pacman -Sy"
elif (( OS==deb ))
then 
    export package_manager="apt install -y"
else
    printf "No package manager detected, aborting."
    exit 1
fi
echo "$package_manager"

尝试在 bash 中检测 linux 用户的包管理器,但即使我使用的包管理器不是 zypper 并且未安装 zypper,它似乎总是输出 zypper。有人知道可能导致问题的原因吗?

答案1

在 bash 中,((...))严格用于算术表达式。单词OSandalpine被视为变量名,并且由于这些变量不包含数字,因此它们的值为零。0==0是真的,所以zypper。

您想要的是[[...]]用于字符串比较的内置构造。

if [[ "$OS" == "zypper" ]]

请注意,[[(以及[test)根据以下情况做不同的事情他们得到了多少争论,这意味着在运算符周围放置空格非常重要。

相关内容