我试图使用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"不匹配。总是显示
"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"
。