为什么在某些版本的 sudo -i 中使用变量时需要花括号?

Bar*_*mar 5 bash sudo variable

考虑以下命令:

sudo -i bash -c 'A=2; echo "|${A}|"; echo "|$A|";'
Run Code Online (Sandbox Code Playgroud)

当我在 Debian Linux 上运行它时,它会bash 4.2.37打印sudo 1.8.5p2

|2|
|2|
Run Code Online (Sandbox Code Playgroud)

但是当我在 MacOS High Sierra 上运行它时,bash 3.2.57sudo 1.8.17p1会打印:

|2|
||
Run Code Online (Sandbox Code Playgroud)

$A为什么没有花括号就不显示?

-i如果省略该选项,则不会发生这种情况- 两者2都会被打印。bash如果我只是跑而不经过,就不会发生这种情况sudo

在回答SO 问题时遇到了这种行为。那里的回答者正在运行 Linux,并且bash 4.3.48得到sudo 1.8.16了丢失的输出。所以看起来它与sudo版本有关(或者可能是/etc/sudoers他的 Linux 和我的 Mac 的共同点)。