songbird (2018-08-27): > me@ant(25)$ env | grep -F "-g" > grep: invalid option -- 'g'
Maybe what you want is an explanation rather than just a solution. Quotes are for the shell: they protect arguments that contain special characters, so that commands get them as is. For example, you need to write: echo "Fire*Wolf" because without the quotes, the shell would try to find all the files in the current directory with a name that matches the pattern. Since the dash is not special for the shell, the quotes are unnecessary. They do no harm, but have no consequences here: grep "-g" grep '-g' grep -g grep ""''""-"g"'' all invoke grep with one extra argument "-g". The dash is special for programs that understand options (some do not; some do with a different syntax, for example key=value), and need to be escaped the way programs expect it. The usual escaping is that an argument "--" means all following arguments are not options, even if they start with a dash. > me@ant(26)$ env | grep -F '-g' > grep: invalid option -- 'g' Same as above. > me@ant(28)$ env | grep '\-g' > CFLAGS=-g grep sees the argument starting with a backslash, it is not an option, therefore it is the regexp. But backshash-dash could have had a special semantic, like backslash-parentheses. > me@ant(29)$ env | grep '-g' > grep: invalid option -- 'g' Same as above. > me@ant(30)$ env | grep "-g" > grep: invalid option -- 'g' Same as above. Regards, -- Nicolas George
signature.asc
Description: Digital signature