Lan*_*nes 3 bash environment-variables quoting
如果我附加这个:
hi=11
export hi
Run Code Online (Sandbox Code Playgroud)
到 .bashrc 然后我 su 到这个用户:
su - bela
Run Code Online (Sandbox Code Playgroud)
然后我:
echo $hi
11
Run Code Online (Sandbox Code Playgroud)
然后它就可以工作了,“hi”变量的值为“11”。但。当我:
su -c "echo $hi" bela
Run Code Online (Sandbox Code Playgroud)
变量“hi”没有值。为什么?
(在 CentOS 6 上运行)
su -c "echo $hi" bela扩展为单词su, -c,echo ?和bela。由于该变量hi未在您当前的 shell 中定义,因此其扩展为空。以用户身份执行的命令bela是echo ?.
修复:su -c 'echo $hi' bela, 用单引号保护$免于扩展......不是。该.bashrc文件只能由交互式 shell 读取。当您运行时su -c 'echo $hi' bela,它echo $hi以用户身份执行bela。但是由于没有定义变量hi,命令echo $hi扩展到echo仍然不打印任何内容。