猿问

Bash变量范围

请向我解释为什么最后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语句之外打印。我认为我在这里缺少有关变量范围的信息,但是联机帮助页没有向我显示。


PIPIONE
浏览 534回答 3
3回答

侃侃无极

问题在于,与管道放在一起的进程在子外壳程序中执行(因此具有自己的环境)。while管内发生的任何事情都不会影响管道外部的任何内容。您的具体示例可以通过将管道重写为while ... do ... done <<< "$OUTPUT"也许while ... do ... done < <(echo "$OUTPUT")

明月笑刀无情

另一种选择:#!/bin/bashcat /some/file | while read linedo&nbsp; var="abc"&nbsp; echo $var | xsel -i -p&nbsp; # redirect stdin to the X primary selectiondonevar=$(xsel -o -p)&nbsp; # redirect back to stdoutecho $var编辑:在这里,xsel是一项要求(安装它)。另外,您可以使用xclip:&nbsp; xclip -i -selection clipboard 代替&nbsp; xsel -i -p
随时随地看视频慕课网APP
我要回答