2人のユーザーがいると仮定します: user1 (管理者) と user2 (標準ユーザー)
- ユーザー1としてログイン
走る
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
この時点で変数が持つ値だからです。
(また、2 番目のコマンドの出力は実際には では $HOME=/home/user1
なく、単に であると思われます/home/user1
)。
一重引用符を使用すると、最初のシェルでの変数の展開を防ぐことができます。
$ sudo su - user2 -c 'echo $HOME'
/home/user2