bash中“local -n”中的-n参数是什么意思?

cod*_*der 4 linux bash local

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

我找不到一个很好的例子/解释。没有关键字的手册页(看起来?)。我发现的最接近的是这里的评论:local: -n: invalid option - 这表明不使用!参数扩展

cho*_*oba 9

遗憾的是,参数 tolocal没有记录在 中help local,而是记录在help declare

 `-n` make NAME a reference to the variable named by its value
Run Code Online (Sandbox Code Playgroud)

它是如何工作的?

 `-n` make NAME a reference to the variable named by its value
Run Code Online (Sandbox Code Playgroud)

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

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


Tho*_*mas 6

-n将变量声明为nameref

\n
\n

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

\n
declare -n ref=$1\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
\n

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

\n