The easiest way to explain it is that they are shorthand expressions that reduce the amount of code you have to write.
To answer your question:
<%= %> is the equivalent of Response.Write();
<%$ %> is an expression. And it takes this form: <%$ expressionPrefix: expressionValue %> So, for example, you might do something like this on your web form in a content well (Assume that you have a key in your app settings named Foo):
<%$ AppSettings: Foo %>
This is no different than doing something like Response.Write(ConfigurationManager.AppSettings["Foo"])
Finally the <%# %> is a DataBinding expression and you can use it for either one way (read only) or two way (updateable) binding. You will typically only ever use this expression inside of controls that you can databind data sources to (DropDownList, Repeater, GridView, etc).
The two forms of the databinding expression are:
<%# Eval("ColumnName") %> (Used for one-way readonly binding)
<%# Bind("Column1") %> (Used for two-way updateable binding)
In the case of the latter it is typical that you would see its used in a manner such as:
aspnet Code:
<asp:TextBox ID="textboxColumn1" RunAt="Server"
Text='<%# Bind("Column1") %>' />
so that any changes to the data could be persisted back to the database whereas the former of the two could simply exist in a div such as:
aspnet Code:
<div>
<%# Eval("ColumnName") %>
</div>
Does that help clear things up?
In so far as a book that defines all of these symbols, the closest you will come is probably the MSDN because a book containing nothing but defintions of symbols and such would be cumbersome to read (when was the last time you heard of someone randomly reading a dictionary! ;]).
Google is a great resource for getting answers to things like this and I suggest using it.
hth.
-Doug