如果我有这样的函数my-func
:
my-func(){
v=$1
eval $2
}
这是我运行my-func 123 "echo $v"
时获得的输出:
首次运行:
#nothing
第二次运行:
123
如果我现在运行my-func 789 "echo $v"
,那么我将首次获得以下输出:
123
第二次以上:
789
那么,为什么输出延迟一,我该如何解决呢?
答案 0 :(得分:1)
我不知道是什么使arundeep chohan
相信函数结尾处的行以某种方式在前面的行之前运行。那不是正在发生的事情。
这里有两件事要记住:
在传递给函数之前,参数会在命令行 上进行变量扩展;和
在函数内部定义的变量默认情况下是全局范围的,因此它们在创建时将对整个外壳可用,这在执行到达变量所在行的第一次调用函数期间发生被宣布。除非还导出了变量,否则在销毁shell进程或取消设置该变量时,该变量将不复存在。
这是您的函数定义:
my-func(){
v=$1
eval $2
}
这是您在问题中所描述的输入命令的顺序;注释,以便在函数接收参数之前洞悉命令行中发生的情况;并将每个输出打印在下面:
$ 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