前提

Ubuntu で、Bash と Dash ではシェル組み込みの echo コマンドの挙動が異なります。特に Bash の echo は -e オプションが無いとエスケープシーケンスを解釈しませんが、Dash の echo はデフォルトでエスケープシーケンスを解釈します。この挙動は Bash を --posix モードで起動しても変わりません。

$ bash --posix -c "echo 'a\nb'"
a\nb
$ dash -c "echo 'a\nb'"
a
b

質問

なぜ Bash の echo は POSIX に反して デフォルトではエスケープシーケンスを解釈しないのでしょうか? あるいは、なぜ POSIX の Dash の echo はエスケープシーケンスを解釈するのでしょうか。どういう意図があってそのようなデフォルト動作にしているのか知りたいです。

※歴史的にどちらの echo の方が古いと言えるのか分からなかったのでこのような書き方をしていますが、「なぜ同じ挙動にしなかったの?」というのが疑問です。

※追記:回答を受けて私が POSIX の echo について少し勘違いをしていたことが分かったので、打ち消し線で直しました。

参考

挙動を確かめた環境は Ubuntu 18.04、Bash 4.4.20(1)-release、Dash 0.5.8-2.10 です。

それぞれの説明はマニュアルにも書かれています。

man bash

echo [-neE] [arg ...]

Output the args, separated by spaces, followed by a newline. (中略) If the -e option is given, interpretation of the following backslash-escaped characters is enabled. The -E option disables the interpretation of these escape characters, even on systems where they are interpreted by default. The xpg_echo shell option may be used to dynamically determine whether or not echo expands these escape characters by default. echo does not interpret -- to mean the end of options. echo interprets the following escape sequences: (後略)

man dash

echo [-n] args...

Print the arguments on the standard output, separated by spaces. (中略) If any of the following sequences of characters is encountered during output, the sequence is not output. Instead, the specified action is performed: (後略)

この man bash に書かれている通り、シェルオプション xpg_echo を有効化すると Bash でもオプション無しでエスケープシーケンスを解釈しました。

$ bash --posix -c "shopt -s xpg_echo && echo 'a\nb'"
a
b
$ bash -c "shopt -s xpg_echo && echo 'a\nb'"
a
b

echo コマンドの実装による挙動の差は、次のブログ記事が詳しいです:echo コマンドの違いと移植性の問題