From: Jeff King Date: Tue, 13 Aug 2019 12:17:33 GMT Subject: Re: git grep -F (fixed string) requires matching parenthesis? Message-ID: <20190813121733.GA10787@sigill.intra.peff.net> In-Reply-To: <35477812-7889-4f32-85ac-d3da4e7ff902@www.fastmail.com> On Tue, Aug 13, 2019 at 03:01:04PM +0900, nanaya wrote: > I observed this today: > > $ git grep -F '(' > fatal: unmatched parenthesis > > Which doesn't make sense and I believe shouldn't happen. At first glance this looks like we're feeding a fixed-string pattern to the regex compiler, which would indeed be a bug. But I think it's actually happening at a level above that. git-grep supports multiple patterns, which can be joined with --and, --or, --not, etc. And they can be grouped with parentheses. What you're seeing is the argument parser thinking your '(' is part of the construction of a boolean match formula, and complaining about the lack of closing ')'. You can use "-e" to make it clear that it's a pattern (just as you'd need to for a pattern that starts with "-"): git grep -F -e '(' So I think everything is working as designed, though I admit the implication was slightly surprising to me (and note that it only happens with that _specific_ pattern; something like "(foo" would not be matched by the option parser). -Peff