Reputation: 4043
Bash if condition doesn't match when comparing particular string
Red Hat Enterprise Linux Server release 7.2 (Maipo)
machineOSVersion="Red Hat Enterprise Linux Server release 7.2 (Maipo)"
modifiedOSVersion="CentOS Linux release 7 OR Red Hat Enterprise Linux Server release 7.2 (Maipo)"
if [[ ${machineOSVersion} = *"${modifiedOSVersion}"* ]]; then
echo -e "match"
else
echo -e "doesn't match"
fi
I expected this to match, but it does not.
The same code works with other strings. Is this failing because of (
or )
character in the string?
Upvotes: 1
Views: 403
Reputation: 23850
You've got the 2 variables in the comparison backwards. You have to write the conditional as follows:
if [[ ${modifiedOSVersion} = *"${machineOSVersion}"* ]]; then
You can think of this like that: ${modifiedOSVersion}
is the largest of the two strings, so you need to add stuff to ${machineOSVersion}
to match it. This additional stuff is represented here by the two *
.
Upvotes: 3
Reputation: 785058
You have variable matching reversed. You have to use *
matching around subset variable not the superset variable.
Use:
[[ $modifiedOSVersion == *"$machineOSVersion"* ]] && echo "matched" || echo "nope"
Upvotes: 2