Shell脚本用if字符串判断区分Ubuntu、Debian做差异化配置报错求解
错误原因
[[ ]]是bash的条件判断语法块,内部只能写条件表达式,不能直接执行外部命令。你没有用命令替换捕获awk的输出,bash会把awk及后续参数当成条件运算符解析,直接触发语法错误。
修复代码
你可以用$()语法捕获awk命令的输出再做比较:
if [[ $(awk '{gsub(/ /, "", $1); print $1}' /etc/issue) == "Ubuntu" ]]; then gsettings set org.gnome.mutter overlay-key '' gsettings set org.gnome.shell.extensions.dash-to-dock hot-keys false fi
更稳定的实现方案
读取/etc/issue判断发行版可靠性较低,推荐用所有主流发行版都兼容的/etc/os-release文件判断,还可以直接扩展Debian的配置分支:
source /etc/os-release if [[ $ID == "ubuntu" ]]; then # Ubuntu 专属配置 gsettings set org.gnome.mutter overlay-key '' gsettings set org.gnome.shell.extensions.dash-to-dock hot-keys false elif [[ $ID == "debian" ]]; then # Debian 专属配置,可自行补充 : fi
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

