【问题标题】:Updated values in global variable is lost in Shell Script [duplicate]全局变量中的更新值在 Shell 脚本中丢失 [重复]
【发布时间】:2014-07-23 01:40:42
【问题描述】:

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

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

【问题讨论】:

    标签: linux bash shell


    【解决方案1】:

    while 循环在子 shell 中执行。这是一个常见问题解答; http://mywiki.wooledge.org/BashFAQ/024

    【讨论】:

      【解决方案2】:

      你正在调用你的函数:

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

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

      【讨论】:

      • 在修剪脚本以仅显示全局变量问题时,我删除了 while 的 do 和 done 。我很抱歉。
      • 好的,我不明白 parseResult_$2 在你的脚本中做了什么。尝试以bash -ex ./script.sh 运行您的脚本并检查调试信息。
      • 这是一个函数调用,但这与我的问题无关。我也更新了。
      • 好的,现在检查更新的答案,因为您的问题。
      • 调用你的函数为:executeCommand "$1",而不是echo "$RESULT",使用另一个全局变量来保存$RESULT变量。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 2010-11-30
      • 1970-01-01
      • 2017-08-17
      • 2011-03-19
      • 2011-08-24
      • 1970-01-01
      相关资源
      最近更新 更多