Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 全局变量中更新的值在Shell脚本中丢失_Linux_Bash_Shell - Fatal编程技术网

Linux 全局变量中更新的值在Shell脚本中丢失

Linux 全局变量中更新的值在Shell脚本中丢失,linux,bash,shell,Linux,Bash,Shell,有一个奇怪的问题,“全局变量”的值在一个函数中更新,但当我在其他函数中检查它时,更新的值丢失了。任何帮助都将不胜感激 #!/bin/bash FINAL_RESULT=""; COMMAND_RESULT=""; function init() { USERNAME="root"; DF_THRESHOLD="20"; DF_COMMAND="df -Pkh"; } function executeCommand() { local RESULT;

有一个奇怪的问题,“全局变量”的值在一个函数中更新,但当我在其他函数中检查它时,更新的值丢失了。任何帮助都将不胜感激

#!/bin/bash

FINAL_RESULT="";
COMMAND_RESULT="";

function init() {
    USERNAME="root";
    DF_THRESHOLD="20";
    DF_COMMAND="df -Pkh";
}

function executeCommand() {
    local RESULT;
    SERVER=$(hostname);
    RESULT=$($1);
    FINAL_RESULT="$FINAL_RESULT -------------------------- Executing command : \"$1\" on \"$SERVER\" --------------------------"
    echo "Updating FINAL_RESULT to $FINAL_RESULT"   # Updated value is present
    echo "$RESULT"
    COMMAND_RESULT="$RESULT"
}

function getCommandResult() {
executeCommand "$1";
echo "$COMMAND_RESULT" | while read eachLine
    do  
    if [ "$eachLine" != "" ]; then
        echo "----------- eachLine ----------- $eachLine"
    fi
    done
    echo "Found FINAL_RESULT as $FINAL_RESULT"   # Updated values is lost
}

function main() {
    init
    getCommandResult "$MMGETSTATE_COMMAND" "MMGETSTATE";
}

main
echo "*** $FINAL_RESULT"   # Even now the updated values are not found

您正在将函数调用为:

local DF_Result="$( executeCommand "$1" )"

它将在子shell中执行
executeCommand
,因此在任何变量中所做的任何更改在父shell中都不可用。

循环在子shell中执行。这是一个常见问题

在修剪脚本以仅显示全局变量问题时,我删除了While的do和done。我很抱歉。好的,我不明白你的脚本中的
parseResult\u$2
在做什么。尝试以
bash-ex./script.sh运行脚本并检查调试信息。这是一个函数调用,但与我的问题无关。我也更新了它。好的,现在检查更新的答案,因为您的问题。将您的函数调用为:
executeCommand“$1”
,而不是
echo“$RESULT”
使用另一个全局变量来保存
$RESULT
变量。