The documentation of str demonstrates an argument: comp.str. You are free to set it as you want, for example empty string to omit a symbol while showing str output on console.
> str(mtcars, comp.str="")
'data.frame': 32 obs. of 11 variables:
mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
cyl : num 6 6 4 6 8 6 8 4 4 6 ...
disp: num 160 160 108 258 360 ...
hp : num 110 110 93 110 175 105 245 62 95 123 ...
drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
wt : num 2.62 2.88 2.32 3.21 3.44 ...
qsec: num 16.5 17 18.6 19.4 17 ...
vs : num 0 0 1 1 0 1 0 1 1 1 ...
am : num 1 1 1 0 0 0 0 0 0 0 ...
gear: num 4 4 4 3 3 3 3 4 4 4 ...
carb: num 4 4 1 1 2 1 4 2 2 4 ...
Hope this helps.
Edit (in reply to @clevenius_Purab 's doubts in #7 and #8)
correct
I'm not sure I understand what you are asking. Is your question why show $ or any other symbol at all?
If so, I do not know the answer. Perhaps it is due to the fact that for a nested object with every component being named, it'll help to understand how to extract a particular component. The same logic will also provide some guidance to unnamed components as well, but not so much. I agree that this is not a strong argument, so there is probably some other reason, but I'm not aware of it. Sorry.