I am writing a script. What is the difference between the following two lines?

grep . || echo something


grep "^\." || echo something

Grep uses regular expressions; there, a single full stop . matches any single character. To match a literal full stop/period, you need to escape it with a backwards-slash like so: \.. ^ means 'the beginning of the line'.

So, grep . will match anything that contains a single character (so I suppose it wouldn't match empty lines). On the other hand, grep "^\." matches any line that starts with a literal .

In bash, || means 'or'; grep "^\." || echo something will echo something if the grep doesn't turn up any lines (so it evaluates to false). && is used for 'and' in bash.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.