Why is $ the default symbol for a user shell and # the default symbol for a root shell?
Historically the original /bin/sh Bourne shell would use $
as the normal prompt and #
for the root user prompt (and csh would use %
). This made it pretty easy to tell if you were running as superuser or not.
#
is also the comment character, so anyone blindly re-entering data wouldn't run any real commands.
More modern shells (eg ksh, bash) continue this distinction of $
and #
although it's less important when you can set more complicated values such as the username, hostname, directory :-)
Tradition.
The POSIX standard says (my emphasis):
PS1
This variable is used for interactive prompts. Historically, the "superuser" has had a prompt of
#
. Since privileges are not required to be monolithic, it is difficult to define which privileges should cause the alternate prompt. However, a sufficiently powerful user should be reminded of that power by having an alternate prompt.
See also this answer to virtually the same question on the SuperUser forum.