在变量赋值可移植的 RHS 中是否关闭了字段拆分和文件名扩展?

cuo*_*glm 5 shell posix

在大多数符合 POSIX 标准的 shell 中,如bash. ksh, dash, mksh, pdksh, 当变量赋值发生时,在赋值的 RHS 中不执行字段拆分和文件名扩展(如果 shell 支持,则扩展括号):

$ IFS=/
$ a=1/2
# Field splitting and filename expansion turned off here
$ b=$a
$ IFS=
$ printf '%s\n' $b
1/2
Run Code Online (Sandbox Code Playgroud)

一些 shell 的文档(bashksh)提到了这一点,但POSIX 文档没有。

我可以在大多数符合 POSIX 的 shell 中看到这种行为,所以我想知道它是否可移植,因为 POSIX 文档没有指定它?

mur*_*uru 7

取决于你在哪里看。从第 2 章第 9.1 节

在分配值之前,每个变量分配都应针对波浪号扩展、参数扩展、命令替换、算术扩展和引号删除进行扩展。

我认为这个列表是详尽的,并且由于没有提到字段拆分,缺少字段拆分是 POSIX 指定的。