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
变量。