You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中case语句匹配/etc/os-release ID字段异常求助

问题排查与解决

从typeset -p chk_distro的输出declare -- chk_distro="\"centos\""可以明确:变量chk_distro的实际值是带双引号的字符串"centos",而你case语句中匹配的是不带双引号的centos,两者内容不一致,所以无法匹配。

原因分析

/etc/os-release中的ID字段行格式为ID="centos",你当前的提取命令直接把等号后的"centos"(包含双引号)赋值给了变量,导致变量内容带引号,和case里的匹配模式不匹配。

修正方案

提取字段时去掉双引号即可,修改提取命令:

# 用awk的gsub去掉双引号
chk_distro=$(grep -w "ID" /etc/os-release | awk 'BEGIN{FS="="} {gsub(/"/, "", $2); print $2}')

# 或者用grep的perl正则直接提取不带引号的内容
# chk_distro=$(grep -wPo 'ID="\K[^"]+' /etc/os-release)

echo "$chk_distro"

case "$chk_distro" in
    "centos" ) echo "Distro matched";;;
    * ) echo "No match found";;;
esac

修改后,chk_distro的值会是纯centos,case语句就能正确匹配。

内容的提问来源于stack exchange,提问作者saikat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:09:20