grep 'foo' # or more explicitly, grep '.*foo.*'
* matches any number of any character.
* matches any number of the preceding character.
grep uses regex, not globs, so this means that
grep '*foo' is nonsensical because there's no preceding character for
If the intention was to match "any number of characters followed by foo", use
'.*foo'. Also note that since grep matches substrings, this will match "fishfood". Use anchors to prevent this, e.g.
This also means that
f* will match "hello", because
f* matches 0 (or more) "f"s and there are indeed 0 "f" characters in "hello". Again, use
grep 'f' to find strings containing "f", or
grep '^f' to find strings starting with "f".
If you're aware of the differences between globs and regex, you can ignore this message.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.