为什么将数组字符串(带括号)分配给环境变量不起作用

Why the assignment of an array string (with brackets) to environment variable is not working

在bashshell中执行以下命令:

export sz1='"authorities" : ["uaa.resource"]'

现在,试试echo $sz1

我希望看到以下输出:

"authorities" : ["uaa.resource"]

但是我得到的是:

"authorities" : c

有趣的是,我有几十台服务器,我可以在其中执行这种类型的变量赋值,而且它可以在这台服务器上工作。此服务器具有完全相同的 OS 版本、配置文件、bash 版本等。此行为的原因可能是什么?

总是引用你的变量。使用

echo "$sz1"

当你不引用变量时,分词和通配符扩展是在变量扩展上完成的。在 ["uaa.resource"] 上是一个通配符,它​​将匹配以下任何文件名:

"
u
a
.
r
e
s
o
u
c

在那台机器上,您有一个名为 c 的文件,因此通配符匹配并替换为该文件名。