Bash 为什么不';是否在导出命令的赋值部分扩展了通配符?

Bash 为什么不';是否在导出命令的赋值部分扩展了通配符?,bash,environment-variables,wildcard,built-in,Bash,Environment Variables,Wildcard,Built In,我正在编写自己的shell(尽可能接近bash),我正在进行通配符扩展,我看到了使用带星号的export的奇怪行为 bash-3.2$ touch TEST=a bash-3.2$ touch TEST=b bash-3.2$ echo TEST=* TEST=a TEST=b bash-3.2$ export TEST=* bash-3.2$ env | grep TEST TEST=* 在某些情况下,星号似乎会展开,但在调用export时,星号不会展开,这没有多大意义。bash中是否有一条

我正在编写自己的shell(尽可能接近bash),我正在进行通配符扩展,我看到了使用带星号的
export
的奇怪行为

bash-3.2$ touch TEST=a
bash-3.2$ touch TEST=b
bash-3.2$ echo TEST=*
TEST=a TEST=b
bash-3.2$ export TEST=*
bash-3.2$ env | grep TEST
TEST=*

在某些情况下,星号似乎会展开,但在调用
export
时,星号不会展开,这没有多大意义。bash中是否有一条我可能会错过的规则可以解释这种行为?

导出
构建的调用采用以下形式:

export [-fn] [-p] [name[=value]]
如果给定了该值,则将其视为参数赋值,并且此处不进行文件名扩展,请参阅参考手册的相关部分:

所有值都经过波浪线展开、参数和变量展开、命令替换、算术展开和引号删除(详细信息如下)。如果变量设置了integer属性,则即使未使用$(…)展开,值也将作为算术表达式进行计算(请参见算术展开)。除下文解释的“$@”外,不执行分词不执行文件名扩展。

导出
是一个声明实用程序。与变量赋值相似的参数以变量赋值相同的方式展开,即既不进行路径名展开,也不进行分词,值部分进行波浪线展开。尽管该标准于2010年制定,但即使是最新版本的标准也未能记录这种行为。然而,建议的变更适用于202x.1草案(请参阅是否希望获得副本),因此,当下一版标准发布时,在第二步第一句之后,您很可能会看到以下声明,其中规定了您认为奇怪的行为

如果命令名被识别为声明实用程序,那么将被单独识别为变量赋值的任何剩余单词应扩展为变量赋值