局部变量更改值晚
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
如果我有这样的函数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