为什么这个变量即使在 .bashrc 中设置也没有值?

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 上运行)

Gil*_*il' 9

su -c "echo $hi" bela扩展为单词su, -c,echo ?bela。由于该变量hi未在您当前的 shell 中定义,因此其扩展为空。以用户身份执行的命令belaecho ?.

修复:su -c 'echo $hi' bela, 用单引号保护$免于扩展......不是。该.bashrc文件只能由交互式 shell 读取。当您运行时su -c 'echo $hi' bela,它echo $hi以用户身份执行bela。但是由于没有定义变量hi,命令echo $hi扩展到echo仍然不打印任何内容。