user1(管理者)とuser2(標準ユーザー)という2人のユーザーがいるとします。
- user1でログイン
走る
sudo su - user2 -c "env"
結果には $HOME=/home/user2 が表示されます。
走る
sudo su - user2 -c "echo $HOME"
結果には $HOME=/home/user1 が表示されます。
なぜそんなことですか?
答え1
$HOME
これは、2番目の例では、シェルがコマンドを実行する前に変数が拡張されたためです。したがって、実際に実行しているのは次のとおりです。
sudo su - user2 -c "echo /home/user1"
$HOME
なぜなら、この時点の変数値だからです。
$HOME=/home/user1
(また、2番目のコマンドの出力は実際にはthatではなくただthatと推測します /home/user1
。)
一重引用符を使用すると、最初のシェルで変数の拡張を防ぐことができます。
$ sudo su - user2 -c 'echo $HOME'
/home/user2