如何在父shell和子shell之间使用相同的bash变量

toc*_*777 6 linux variables bash scripting

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


function test
{
   running=$(( $running - 1 ))
}

running=0
test &
echo $running


因为测试功能在子shell中运行,所以它不会影响运行变量,并且我得到0回显到屏幕.我需要子shell才能更改父shell变量,如何做到这一点?我试过出口但无济于事.

编辑感谢所有有用的答案,我想在后台运行此功能的原因是允许同时运行多个功能.我需要能够回调父脚本,告诉它何时完成所有功能.我一直在使用pid来做这个,但我不想检查循环中是否有多个进程不断存在.

Ron*_*ble 2

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

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

但对于您在示例中所做的事情,请尝试将其作为脚本:

#!/bin/bash

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

并将其调用为:

运行=$(testSO)

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

  • 您混淆了从函数“返回”信息的两种不同方式:将其作为状态返回(“return”的作用),并将其发送到标准输出(这就是“$(...)”捕获的内容)。您需要使用 `echo $running` 和 `running=$(testSO)` 或 `return $running` 和 `testSO; running=$?` 不是两者的混合。由于“正在运行”似乎不是状态指示器(即非零并不表示错误),因此我会采用第一种方法。 (2认同)