2014-07-22 101 views
2

存在一個奇怪的問題,即在函數中更新「全局變量」的值,但當我在其他函數中檢查更新值時,更新的值會丟失。任何幫助,將不勝感激。全局變量中的更新值在Shell腳本中丟失

#!/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 

回答

0

要調用你的函數爲:

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

將在一個子shell中執行executeCommand,因此在任何變量所做的任何更改將不會在父shell中可用。

+0

在修剪腳本以顯示全局變量問題時,我刪除了do和do while。我道歉。 – Amber

+0

好的我沒有得到'parseResult_ $ 2'在你的腳本中做什麼。嘗試以'bash -ex。/ script.sh'運行腳本並檢查調試信息。 – anubhava

+0

這是一個函數調用,但這與我的問題是相切的。我也更新過。 – Amber