diff --git a/src/builtin_string.cpp b/src/builtin_string.cpp
index f5cc6f971..d464a18e4 100644
--- a/src/builtin_string.cpp
+++ b/src/builtin_string.cpp
@@ -750,7 +750,7 @@ class pcre2_matcher_t : public string_matcher_t {
             return 0;
         }
 
-        if (opts.entire) {
+        if (opts.entire && !opts.quiet) {
             streams.out.append(arg);
             streams.out.push_back(L'\n');
         }
@@ -864,12 +864,6 @@ static int string_match(parser_t &parser, io_streams_t &streams, int argc, wchar
         return STATUS_INVALID_ARGS;
     }
 
-    if (opts.entire && opts.quiet) {
-        streams.err.append_format(BUILTIN_ERR_COMBO2, cmd,
-                                  _(L"--entire and --quiet are mutually exclusive"));
-        return STATUS_INVALID_ARGS;
-    }
-
     std::unique_ptr<string_matcher_t> matcher;
     if (opts.regex) {
         matcher = make_unique<pcre2_matcher_t>(cmd, pattern, opts, streams);
diff --git a/tests/checks/string.fish b/tests/checks/string.fish
index a82b15883..dc3eb6e84 100644
--- a/tests/checks/string.fish
+++ b/tests/checks/string.fish
@@ -561,5 +561,9 @@ count (dualcollect)
 # CHECK: 3
 
 string match -qer asd asd
-# CHECKERR: match: Invalid combination of options,
-# CHECKERR: --entire and --quiet are mutually exclusive
+echo $status
+# CHECK: 0
+
+string match -eq asd asd
+echo $status
+# CHECK: 0