$がユーザーシェルのデフォルトシンボルであり、#がルートシェルのデフォルトシンボルであるのはなぜですか?

$がユーザーシェルのデフォルトシンボルであり、#がルートシェルのデフォルトシンボルであるのはなぜですか?

サーバーで標準のbashシェルを操作すると、PS1プロンプトはデフォルトで$(root以外のユーザーの場合)で終わり、rootユーザーの場合は#で終わります。

つまり:

ubuntu@server:~$ sudo su
root@server:/home/ubuntu#

なぜこれですか?

答え1

$歴史的に、元の/bin/sh Bourneシェルは通常のプロンプトと#ルートプロンプト(cshで使用)の両方として使用されていました%。これにより、スーパーユーザーとして実行しているかどうかを簡単に知ることができます。

#また、コメント文字なので、盲目的にデータを再入力する人は実際のコマンドを実行しません。

より現代的なシェル(例:ksh、bash)はこれらの区別を続けますが$#より複雑な値(ユーザー名、ホスト名、ディレクトリなど)を設定できる場合はそれほど重要ではありません。 :-)

答え2

伝統。

POSIX規格によると(私のハイライト):

PS1

この変数は対話型プロンプトに使用されます。歴史的に、「スーパーユーザー」のプロンプトは#権限がモノリシックである必要はないため、代替プロンプトが発生する必要がある権限を定義することは困難です。ただし、十分に強力なユーザーには、代替プロンプトでこの機能を思い出させる必要があります。

また、見ることができますこの回答スーパーユーザーフォーラムにもほぼ同じ質問があります。

関連情報