Bash脚本判断变量包含关系出错:为何输出‘sad =(’?
Bash脚本判断字符串包含关系不符合预期的原因
你编写了以下Bash脚本,意图判断变量var_2是否包含var_1,但执行后输出sad =(,不符合预期:
var_1="hi" var_2="bye,hi,hello" if [[ "$var_1" == *"$var_2"* ]]; then echo "value of var_1 in var_2"; else echo "sad =("; fi
问题原因
你搞反了匹配逻辑的左右变量顺序。
在Bash的[[ ... ]]条件判断中,==右侧的*是通配符,正确的子串包含判断语法是:
[[ "目标字符串" == *"要查找的子串"* ]]
这个语法的含义是:检查目标字符串中是否存在要查找的子串。
你的脚本里写的是[[ "$var_1" == *"$var_2"* ]],这相当于判断短字符串hi(var_1的值)是否包含长字符串bye,hi,hello(var_2的值),显然不可能成立,因此脚本进入else分支输出sad =(。
修正后的脚本
把左右变量调换位置,即可实现预期的判断逻辑:
var_1="hi" var_2="bye,hi,hello" if [[ "$var_2" == *"$var_1"* ]]; then echo "value of var_1 in var_2"; else echo "sad =("; fi
执行修正后的脚本,会输出预期的value of var_1 in var_2。
内容的提问来源于stack exchange,提问作者Drozt
相关产品推荐
相关产品推荐

