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。