Bash
在 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。有人知道可能導致問題的原因嗎?
在 bash 中,
((...))
嚴格用於算術表達式。單詞OS
andalpine
被視為變數名,並且由於這些變數不包含數字,因此它們的值為零。0==0
是真的,所以 zypper。您想要的是
[[...]]
用於字元串比較的內置構造。if [[ "$OS" == "zypper" ]]
請注意,
[[
(以及[
andtest
)根據獲得的參數數量來做不同的事情,這意味著在運算符周圍放置空格非常重要。