また、これらの変数は常に現在ログインしているユーザー名と一致しますか(私のDebianシステムで一致しますか)?他のUnix(-like)システムで利用できると仮定できますか?
またwhoami、これらの変数のいずれかを読み取るのではなく、なぜ使用するのか興味があります。
USERとUSERNAMEは、通常の環境変数です。つまり、必要に応じて、任意の値に設定できます。と入力するだけですUSER=xyz。つまり、これらの変数が存在する場合でも、それらの値が現在ログインしているユーザー名と一致するという保証はありません。
guarantee、私はデフォルトで意味しました(つまり、ユーザーがそれらを変更しなかったと仮定)。
sudo whoamiし、sudo echo $USER
sudo echo $USER、シェルは展開$USERしてから呼び出しますsudo。したがって、もちろん、と同じ出力は生成されませんwhoami。同様にsudo whoami、sudo sh -c 'echo $USER'(通常)outputを行いますroot。コメントwhoamiEUIDを使用して、ノートsudo whoamiの出力となるroot場合でも、whoamiUIDを使用します。sudoセットの両方それは(あなたが明示的に動作するようにそれを設定することは非常に異例な状況を除いて)実行するコマンドのためのEUIDとUID。と比較sudo id -uしてくださいsudo id -ru。
manページを見て、whoami有効なユーザーIDに関連付けられた名前を報告します。つまりsudo、setuid実行可能ファイルを使用または実行している場合は、別の何かを返します。sudo設定済みの場合はsudo whoami、たとえば試してください。