gpt4 book ai didi

Bash 变量作用域

转载 作者:行者123 更新时间:2023-11-29 08:38:55 25 4
gpt4 key购买 nike

请向我解释为什么最后一个 echo 语句是空白的?我希望 XCODE 在 while 循环中递增到值 1:

#!/bin/bash
OUTPUT="name1 ip ip status" # normally output of another command with multi line output

if [ -z "$OUTPUT" ]
then
echo "Status WARN: No messages from SMcli"
exit $STATE_WARNING
else
echo "$OUTPUT"|while read NAME IP1 IP2 STATUS
do
if [ "$STATUS" != "Optimal" ]
then
echo "CRIT: $NAME - $STATUS"
echo $((++XCODE))
else
echo "OK: $NAME - $STATUS"
fi
done
fi

echo $XCODE

我尝试使用以下语句代替 ++XCODE 方法

XCODE=`expr $XCODE + 1`

它也不会在 while 语句之外打印。我想我在这里遗漏了一些关于变量范围的信息,但是 ol' 手册页没有向我显示它。

最佳答案

因为您正在进入 while 循环,所以会创建一个子 shell 来运行 while 循环。

现在这个子进程有自己的环境副本,不能传递任何变量返回到它的父进程(就像在任何 unix 进程中一样)。

因此,您需要进行重组,以免进入循环。或者,您可以在一个函数中运行,例如,echo 您的值想要从子流程中返回。

http://tldp.org/LDP/abs/html/subshells.html#SUBSHELL

关于Bash 变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/124167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com