I could see that certain patterns in the GNU Grep can be enclosed within brackets and certain others need not be. For example, matching the beginning of a word works only if it is enclosed within quotes.

```
user@host:~/Desktop$ grep -E '\<H' test
Hello World
user@host:~/Desktop$ grep -E \<H test

```

[test contains the string Hello World]

But matching end and beginning of file works without dollar:

```
user@host:~/Desktop$ egrep d$ test
Hello World

```

Why is it so? And what is the rule?