如何在父shell和子shell之间使用相同的bashvariables

我有一个类似于以下的bash脚本

function test { running=$(( $running - 1 )) } running=0 test & echo $running 

因为testing函数是在一个子shell中运行的,所以它不会影响运行的variables,并且我得到0回显给屏幕。 我需要子shell能够改变父shell的variables,这怎么能做到呢? 我曾尝试出口,但无济于事。

编辑感谢所有有用的答案,我想在后台运行此function的原因是允许同时运行多个函数。 我需要能够回到父脚本来告诉它什么时候所有的function都完成了。 我一直在使用pid来做到这一点,但是我不想检查循环中是否存在多个进程。

你真的不能。 每个shell都有一个环境的副本。

请参阅shell脚本是否可以设置调用shell的环境变量?

但是在你的例子中你正在做什么,试试这个作为你的脚本:

 #!/斌/庆典

功能测试
 {    
     running = $(($ running  -  1));
    返回$运行;
 }

并调用它为:

运行= $(testSO)

如果你只想有效地返回一个值,那么只需从函数返回值即可。

使用别名而不是函数。 或者用函数体写一个脚本,然后用source执行。

这两个解决方案都避免了创建一个子shell。