bash shell 里面有全局变量这个概念吗
如图,shell 脚本中定义了一个变量 workdone=0,在脚本结束后设置为workdone=1。
中间定义了一个在后台运行的检测函数 watchingPids, #line 50 执行后台运行。这个函数中有这样一段代码。用来检测workdone的值,当值==1时,函数退出。
但实际的执行结果却是:watingPids函数中,workdone永远都是0
    if [ ${workdone} -eq 1 ];then        echo ${workdone}
        exit 0
    fi

回答:
有,但是watchingPids & fork 出来了一个新的进程,而新的进程中的workdone和原本的workdone是不相关的。
你可以认为这是执行了两次这个脚本,一个脚本安装 watchingPids的流程执行,一个没有执行这句话,所以watchingPids &中的 workdone永远是0
想要实现你想要的结果可以使用信号量
#!/bin/bash #=============
function watch(){
#=====当收到信号时执行的命令
trap 'echo "do something";exit' 15
while true
    do
        echo "do somethings"
    done
}
#=====
watch &
watchpid=$!  # 获得后台进程pid
sleep 3
kill -15 $watchpid # 给进程发送信号量
wait ${watchpid}
以上是 bash shell 里面有全局变量这个概念吗 的全部内容, 来源链接: utcz.com/p/193539.html
