case语句在bash中没有按预期工作



我试图使用case语句匹配/etc/os- release的ID字段与字符串值。我的代码是

chk_distro=$(grep -w "ID" /etc/os-release | awk 'BEGIN{FS="="} {print $2}')
echo "$chk_distro"
case "$chk_distro" in
"centos" ) echo "Distro matched";;
* ) echo "No match found";;
esac

我的期望输出是

"centos"
Distro matched

但是$chk_distro与字符串"centos&quot不匹配。总是显示

"centos"
No match found

如果我对分配给chk_distro变量的替换命令输出有问题,那么它将不能正确显示为

的输出
echo "$chk_distro"

请帮我找出这个问题。

typeset -p chk_distro输出为declare -- chk_distro=""centos""

echo所示,您的数据包含文字引号。您的case检查不包含字面引号的字符串。

如果您只想更改case语句,请考虑:

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

shell语法"centos"表示字面值字符串centos,不包含引号。

相比之下,shell语法'"centos"'表示字面值字符串"centos"

最新更新