当您使用子 shell 来确保命令中的临时变量不会留下来时,它被称为什么?

当您使用子 shell 来确保命令中的临时变量不会留下来时,它被称为什么?

当您希望变量在子 shell 中运行后消失时,该技术称为什么?

$ (lookForMe=wee && find -type d -name "${lookForMe}_*")
$ echo $lookForMe
$

答案1

Shell 变量始终属于当前 shell。当您生成子 shell 时,它是一个不同的 shell,因此有自己的一组变量。在您的情况下,您正在使用 运行子 shell (......),因此 bash 安排子 shell 最初获取父 shell 的所有变量的副本,但这已经是了。特别是,当子 shell 结束时,变量中的更改不会复制回来,子 shell 中创建的变量也不会传回父 shell。

这不是一个技术,但这就是这样巴什语言是已定义的,因此要求其名称没有多大意义。

整个想法与大多数编程语言中的局部变量的概念有一些相似之处,因此您可能会想将这个属性的利用命名为“创建局部变量”,但我不愿意这样做,因为它忽略了这样一个事实:至少在 的调用点上(...),父 shell 的变量用于初始化子 shell 中的变量。

答案2

除了“在子 shell 中运行东西”之外,它没有特殊的名称。这意味着对子 shell 中的环境所做的更改不会反映在父 shell 环境中。

您可能希望将子 shell 内创建的变量称为“子 shell 环境中的变量”。

相关内容