Die Shell führt einen einzigen Durchgang beim Erweitern von Parametern durch, also $user erweitert wird, aber das vorangehende ~ wird dann nicht erweitert. Um die Eingabezeile neu zu analysieren, verwenden Sie eval :
...
eval sudo du -sh ~$user
...