Korn Shell - nameref在不使用位置参数时失败

nlejzf6q  于 2022-12-27  发布在  Shell
关注(0)|答案(1)|浏览(110)

如标题所述,namereftypeset -n)在不使用位置参数时失败(例如:$1)。
版本:sh(美国电话电报公司研究所)93u + m/1.0.0-beta.2 2021年12月17日
测试示例:

function func_a {
    nameref ref=$1
    ref=( a=1 b=2 c=3 )
}

function func_b {
    typeset return_var=$1
    nameref ref=$return_var
    ref=( 1 2 3 )
}

# Success
function func_c1 {
    typeset var1
    func_a var1
    echo "var1.a = ${var1.a}"
}
func_c1

# Failure
function func_c2 {
    typeset var2
    func_b var2
    echo "var2[@] = ${var2[@]}"
}
func_c2

我期待相同的输出。我需要变量名的改变来坚持参数在函数中的解析和检查方式。
我是否误解了nameref的工作原理?这是预期的行为吗?

bvjveswy

bvjveswy1#

它可能与位置参数没有太大关系,因为如果您第二次运行func_b,它就会成功。

function func_a {
    nameref ref=$1
    ref=( a=1 b=2 c=3 )
}

function func_b {
    return_var=$1
    nameref ref=$return_var
    ref=( a=1 b=2 c=3 )
}

# Success
func_a var1
echo "var1.a = ${var1.a}"

# Failure
func_b var2
echo "var2.a = ${var2.a}"

# Success
func_b var2
echo "var2.a = ${var2.a}"

它可能与复合变量ref有更大的关系,因为如果你赋值一个普通数组,它就会成功。

function func_a {
    nameref ref=$1
    ref=( a=1 b=2 c=3 )
}

function func_b {
    return_var=$1
    nameref ref=$return_var
    ref=(1 2 3)
}

# Success
func_a var1
echo "var1.a = ${var1.a}"

# Success
func_b var2
echo "var2[@] = ${var2[@]}"

这并不是问题的完整答案,但希望它能提供更多的调查材料。

相关问题