Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash将数组作为对函数的引用进行传递时遭到了重击_Bash - Fatal编程技术网

Bash将数组作为对函数的引用进行传递时遭到了重击

Bash将数组作为对函数的引用进行传递时遭到了重击,bash,Bash,我正在使用GNUBash版本4.4.12,遇到了一个不寻常的情况。我试图通过引用函数来传递数组。因此,下面的代码按预期工作 function test() { local -n varK=${2} local varJ=$(( ${1} + 10 )) echo "${varJ}, ${varK[@]}" } varI=( 1 2 ) varJ=3 echo "result = '$( test 1 varI )'" # result = '11, 1 2' echo

我正在使用GNUBash版本4.4.12,遇到了一个不寻常的情况。我试图通过引用函数来传递数组。因此,下面的代码按预期工作

function test() {
    local -n varK=${2}
    local varJ=$(( ${1} + 10 ))
    echo "${varJ}, ${varK[@]}"
}
varI=( 1 2 )
varJ=3
echo "result = '$( test 1 varI )'"  # result = '11, 1 2'
echo "varI = '${varI[@]}'"          # varI = '1 2'
echo "varJ = '${varJ}'"             # varJ = '3'
奇怪的情况是,如果我在函数中使用变量
varI
,即使我将其定义为局部变量,变量
varI
也会被破坏

function test() (
    local -n varK=${2}
    local varI=$(( ${1} + 10 ))
    echo "${varI}, ${varK[@]}"
)
varI=( 1 2 )
varJ=3
echo "result = '$( test 1 varI )'"  # result = '11, 11'
echo "varI = '${varI[@]}'"          # varI = '1 2'
echo "varJ = '${varJ}'"             # varJ = '3'

命令
local-nvark=${2}
是否生成通过引用传递的数组的本地副本?另外,如果我在子shell中运行函数(并将其称为子shell,它是否应该像所有文档所声称的那样影响父进程?

nameref不知道它所指的名称;它是一个简单的别名。
local-n varK=varI
简单地说明,无论何时使用参数名
varK
,都要假装它真的是
varI
,不管是什么名称的意思是。当您使用
varK
时,
varI
是一个值为11的局部变量,因此
varK
也是如此。(部分混淆可能还在于
bash
如何处理与数组语法一起使用的非数组名称;
${varI[@]}
${varI}无论名称上是否设置了数组属性,
都是等效的。)

因此,为了在我的函数中使用
varI
,并且仍然可以访问引用数组,我制作了引用数组的本地副本:

local varJ=( "${varK[@]}" )