The reason for that behaviour is when you use double-quotes, the shell you are currently in will do the variable expansion before it runs "su" and passes the current value of $PATH to su and the echo command you're using. By using single quotes you tell the shell that is about to run 'su' to pass $PATH literal. Don't interpret it. This way the shell that su itself spawns will do its own interpretation and thus you get the "other" $PATH value.