局部变量更改值晚

local variable changes value late

如果我有这样的函数my-func

my-func(){
    v=
    eval 
}

那么这是我为 运行ning my-func 123 "echo $v":

得到的输出

运行第一次吧:

#nothing

运行 第二次+:

123

如果我现在 运行 my-func 789 "echo $v",那么我第一次得到以下输出:

123

这是第二次+:

789

那么,为什么输出延迟了 1,我该如何解决?

我不知道是什么让 arundeep chohan 相信你的函数末尾的行不知何故比之前的行要 运行。事实并非如此。

这里有两点要记住:

  • 参数在 command-line 被发送到函数之前进行变量扩展;和

  • 函数内部定义的变量在默认情况下是全局范围的,因此它们在创建时可用于整个 shell,这发生在第一次调用函数时执行到达声明变量的行。除非变量也被导出,否则它会在 shell 进程被销毁或被取消设置时不复存在。

这是您的函数定义:

my-func(){
    v=
    eval 
}

这是您在问题中输入的命令序列;注释以在函数接收参数之前深入了解命令行上发生的事情;以及下面紧接着打印的每个输出:

$ my-func 123 "echo $v" # my-func 123 "echo "
$ my-func 123 "echo $v" # my-func 123 "echo 123"
123
$ my-func 789 "echo $v" # my-func 123 "echo 123"
123
$ my-func 789 "echo $v" # my-func 123 "echo 789
789