gpt4 book ai didi

bash - 为什么不在导出命令的赋值部分扩展通配符?

转载 作者:行者123 更新时间:2023-12-05 09:06:32 29 4
gpt4 key购买 nike

我正在编写我自己的 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 是一个声明实用程序。它的那些类似于变量赋值的参数以与变量赋值相同的方式扩展,即既不对它们执行路径名扩展,也不对它们执行分词,并且值部分受到波浪线扩展。虽然a bug report是在 2010 年制定的,即使是最新版本的标准也未能记录此行为。但是修改提示here已应用于 202x.1 草案(如果您想获取副本,请参阅 Austin Group homepage),因此很可能在下一版标准发布时,在 Simple Commands 下,在第二步的第一句话之后,您将看到下面的声明,该声明强制执行您认为奇怪的行为。

If the command name is recognized as a declaration utility, then any remaining words that would be recognized as a variable assignment in isolation shall be expanded as a variable assignment.

关于bash - 为什么不在导出命令的赋值部分扩展通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65902280/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com