From 019745515bbc6c515dee600f24e80c4003f76b79 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 5 Jun 2022 10:42:22 -0700 Subject: [PATCH] =?UTF-8?q?grep:=20don=E2=80=99t=20diagnose=20"grep=20'\-c?= =?UTF-8?q?'"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * src/grep.c (main): Skip past leading backslash of a pattern that begins with "\-". Inspired by a remark by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2022-06/msg00022.html --- src/grep.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/grep.c b/src/grep.c index 59d3431..6b976b4 100644 --- a/src/grep.c +++ b/src/grep.c @@ -2848,8 +2848,16 @@ main (int argc, char **argv) } else if (optind < argc) { + /* If a command-line regular expression operand starts with '\-', + skip the '\'. This suppress a stray-backslash warning if a + script uses the non-POSIX "grep '\-x'" to avoid treating + "-x" as an option. */ + char const *pat = argv[optind++]; + bool skip_bs = (matcher != F_MATCHER_INDEX + && pat[0] == '\\' && pat[1] == '-'); + /* Make a copy so that it can be reallocated or freed later. */ - pattern_array = keys = xstrdup (argv[optind++]); + pattern_array = keys = xstrdup (pat + skip_bs); idx_t patlen = strlen (keys); keys[patlen] = '\n'; keycc = update_patterns (keys, 0, patlen + 1, ""); -- 2.36.1