简体   繁体   中英

Bash if condition doesn't match when comparing particular string

Bash if condition doesn't match when comparing particular string

Matching string:

Red Hat Enterprise Linux Server release 7.2 (Maipo)

Code:

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?

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 * .

You have variable matching reversed. You have to use * matching around subset variable not the superset variable.

Use:

[[ $modifiedOSVersion == *"$machineOSVersion"* ]] && echo "matched" || echo "nope"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM