How to determine if a string is a substring of another in bash?
[[ "bcd" =~ "ab" ]]
[[ "abc" =~ "ab" ]]
the brackets are for the test, and as it is double brackets, it can so some extra tests like =~
.
So you could use this form something like
var1="ab"
var2="bcd"
if [[ "$var2" =~ "$var1" ]]; then
echo "pass"
else
echo "fail"
fi
Edit: corrected "=~", had flipped.
You can use the form ${VAR/subs}
where VAR
contains the bigger string and
subs
is the substring your are trying to find:
my_string=abc
substring=ab
if [ "${my_string/$substring}" = "$my_string" ] ; then
echo "${substring} is not in ${my_string}"
else
echo "${substring} was found in ${my_string}"
fi
This works because ${VAR/subs}
is equal to $VAR
but with the first occurrence of the string subs
removed, in particular if $VAR
does not contains the word subs
it won't be modified.
Using bash filename patterns (aka "glob" patterns)
substr=ab
[[ abc == *"$substr"* ]] && echo yes || echo no # yes
[[ bcd == *"$substr"* ]] && echo yes || echo no # no