在 bash 中,"local -n" 中的 -n 参数是什么意思?



在bash中local -n var...的-n参数是什么意思?-它和local var...有什么不同

我找不到一个好的例子/解释。没有关键字手册页(似乎?)我发现最接近的是这里的注释:local: -n: invalid选项-这表明不使用!参数扩展

local的参数不幸没有在help local中记录,但在help declare中:

`-n` make NAME a reference to the variable named by its value

它是如何工作的?

#! /bin/bash
f () {
local -n x=y
y=12
x=42
echo $x $y  # 42 42
}
f

您可以使用!间接实现类似的行为(这就是链接问题中的评论的含义):

#! /bin/bash
f () {
x=y
y=12
echo ${!x}  # 12
}
f

-n声明变量为名称:

可以使用-n选项将nameef属性分配给declarelocal内置命令(请参阅Bash Builtins),以创建nameef,或对另一个变量的引用。这允许对变量进行间接操作。每当对nameef变量进行引用、赋值、取消设置或修改其属性时(使用或更改nameef属性本身除外),操作实际上是对由nameef变量的值指定的变量执行的。在shell函数中通常使用nameef来引用一个变量,该变量的名称作为参数传递给函数。例如,如果将变量名作为第一个参数传递给shell函数,运行

declare -n ref=$1

函数内部的创建一个nameef变量ref,其值是作为第一个参数传递的变量名。对ref的引用和赋值,以及对其属性的更改,都被视为对名称作为$1传递的变量的引用、赋值和属性修改。

值得注意的是,在Bash 5(2019年1月)中添加了nameefs和-n