Para o shell executar o comando
sudo echo $(whoami)
ele deve primeiro descobrir com que argumentos chamar sudo
com. echo
é apenas uma string simples, então o shell não faz nada, mas $(whoami)
é uma substituição de comando que precisa ser expandida. Isso é feito executando whoami
e substituindo a substituição de comando por sua saída. Então, ele está pronto para chamar sudo
.
Isso significa que sudo
será executado com echo
e a saída de whoami
(que foi executada como seu usuário sem privilégios) como argumentos.
Se você quiser executar whoami
com sudo
, poderá colocá-lo em um script e executar o script com sudo
, como você fez, ou poderá usar
sudo sh -c 'echo "$(whoami)"'
Aqui, o script sh -c
é executado como root, portanto, whoami
também será executado como raiz.
O ponto é que o shell que executa whoami
está sendo executado como usuário root.
O shell que executa whoami
no primeiro comando, sudo echo $(whoami)
, é executado como usuário comum, não como root.