linux – 在bash中设置全局变量
发布时间:2020-12-31 01:47:25 所属栏目:Linux 来源:网络整理
导读:我有功能,我希望它有时会挂起.所以我设置了一个全局变量然后读取它,如果它在几秒钟之后没有出现我放弃了.下面不是完整的代码,但是它不起作用,因为我没有将$START作为值5 START=0ineer(){ sleep 5 START=5 echo "done $START" == I am seeing here it return
我有功能,我希望它有时会挂起.所以我设置了一个全局变量然后读取它,如果它在几秒钟之后没有出现我放弃了.下面不是完整的代码,但是它不起作用,因为我没有将$START作为值5 START=0 ineer() { sleep 5 START=5 echo "done $START" ==> I am seeing here it return 5 return $START } echo "Starting" ineer & while true do if [ $START -eq 0 ] then echo "Not null $START" ==> But $START here is always 0 else echo "else $START" break; fi sleep 1; done 解决方法你在后台运行内部函数调用,这意味着START将在当前shell启动的子shell中分配.在该子shell中,START值为5.但是在当前的shell中,它回显了START值,它仍然是0.因为START的更新只会在子shell中. 每次在后台启动shell时,它就像fork一个新进程,它将复制所有当前shell环境,包括变量值,并且新进程将完全与当前shell隔离. 由于子shell已作为新进程分叉,因此无法直接更新父shell的START值.一些替代方式包括当运行内部函数的子shell退出时传递的信号. 常见错误: 出口 export只能用于使变量名可用于从当前shell派生的任何子shell.然而,一旦子壳已分叉.子shell将具有变量和值的新副本,对shell中导出变量的任何更改都不会影响子shell. 请参阅以下代码了解详情. #!/bin/bash export START=0 ineer() { sleep 3 export START=5 echo "done $START" # ==> I am seeing here it return 5 sleep 1 echo "new value $START" return $START } echo "Starting" ineer & while true do if [ $START -eq 0 ] then echo "Not null $START" # ==> But $START here is always 0 export START=10 echo "update value to $START" sleep 3 else echo "else $START" break; fi sleep 1; done (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |