From 6f52ef30e5634b1104b372c266ca8cc80b451c7d Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 5 Jun 2022 10:42:22 -0700 Subject: =?UTF-8?q?grep:=20don=E2=80=99t=20diagnose=20"grep=20'\-c'"?= 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(-) (limited to 'src') diff --git a/src/grep.c b/src/grep.c index 59d34310..9b9407d6 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 suppresses 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, ""); -- cgit v1.2.1