Bash 変数のスコープ 質問する

Bash 変数のスコープ 質問する

最後のステートメントが空白になっている理由を教えてください。whileループで値が 1 に増加されるechoものと予想しています。XCODE

#!/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 ステートメントの外側では印刷されません。ここでは変数のスコープについて何か見落としていると思いますが、古いマニュアル ページにはそれが表示されていません。

ベストアンサー1

while ループにパイプしているため、while ループを実行するためのサブシェルが作成されます。

この子プロセスは環境の独自のコピーを持ち、親に変数を渡すことはできません (他の Unix プロセスと同様)。

したがって、ループにパイプしないように構造を再構築する必要があります。あるいは、たとえば関数内で実行し、echoサブプロセスから返したい値を取得することもできます。

http://tldp.org/LDP/abs/html/subshel​​ls.html#SUBSHELL

おすすめ記事