.bashrc é um arquivo de configuração do bash, apenas quando executado de forma interativa. Ele só é carregado quando você inicia o bash, não quando você executa algum outro programa como sh (nem mesmo se o bash é chamado através do nome sh ). E só é carregado quando o bash é interativo, não quando está executando um script ou um comando com -c .
sudo sh -c 'echo $PATH' ou sudo bash -c 'echo $PATH' não invoca um shell interativo, portanto .bashrc não está envolvido.
sudo su; echo $PATH executa uma instância interativa do shell do root. Se isso é bash, então ~root/.bashrc é carregado. Este fragmento executa echo $PATH quando este shell interativo terminar, portanto, o que acontecer no shell interativo não terá influência sobre o que o snippet imprime no final. Mas se você digitar echo $PATH no prompt do shell interativo iniciado por sudo su , verá o valor definido por ~root/.bashrc .
Como .bashrc é invocado em cada shell interativo, não por cascas de login (nem mesmo por cascas de login interativas, que é um defeito de projeto no bash), é o lugar errado para definir variáveis de ambiente. Use .bashrc para configurações bash interativas, como combinações de teclas, aliases e configurações de conclusão. Configure variáveis de ambiente em arquivos que são carregados quando você efetua login: ~/.pam_environment ou ~/.profile .
Portanto, defina PATH em .profile em vez de .bashrc e execute um shell de login com sudo -i 'echo $PATH' ou explique explicitamente .profile com sudo sh -c '. ~/.profile; echo $PATH' .