The in-line script that you call is single-quoted (as it should be). This means that the `sh -c` shell will get a script where `"${SearchTerm}"` is unexpanded.  Since that shell does not have a `SearchTerm` variable, its value will be empty.


Since you tagged your question with [tag:bash], you can pass the name of an exported function:

```lang-bash
# Our find function.
# Takes the name of a test function that will be called
# with the pathname of a directory.
myfind () {
    local thetest="$1"

    # Run find, passing the name of the function into the in-line script.
    find . -type d -exec bash -c '
        testfunc=${1:-:}; shift
        for dirpath do
            "$testfunc" "$dirpath" && printf "%s\n" "$dirpath"
        done' bash "$thetest" {} +
}

# Our test function.
test_md_file () {
    [ -f "$1/${1##*/}.md" ]
}
export -f test_md_file

# Run the thing.
myfind test_md_file
```

The `testfunc=${1:-:}` in the code will assign `$1` to `testfunc` if it's available and not empty, otherwise, it will use `:` as the test (a no-op function that returns true).