Values printed by the print command are saved in the GDB value history.
This lets you refer to them in other expressions. Values are kept until the symbol table is reread or discarded (for example with the file or symbol-file commands). When the symbol table changes, the value history is discarded, since the values may contain pointers back to the types defined in the symbol table.
The values printed are given history numbers, which you can use to refer to them. These are successive integers starting with 1. The print command shows you the history number assigned to a value by printing $num = before the value; here num is the history number.
To refer to any previous value, use $ followed by the value's history number. The way print labels its output is designed to remind you of this. Just $ refers to the most recent value in the history, and $$ refers to the value before that. $$n refers to the nth value from the end; $$2 is the value just prior to $$, $$1 is equivalent to $$, and $$0 is equivalent to $.
For example, suppose you have just printed a pointer to a structure and want to see the contents of the structure. It suffices to type:
p *$
If you have a chain of structures where the component next points to the next one, you can print the contents of the next one with this:
p *$.next
You can print successive links in the chain by repeating this command—which you can do by just typing Enter.
print x set x=5
then the value recorded in the value history by the print command remains 4 even though the value of x has changed.
Pressing Enter to repeat show values n has exactly the same effect as show values +.