[解決済み] Bashの変数スコープ
2022-03-05 17:22:02
質問
なぜ最後の
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文の外にはプリントされません。変数のスコープについて何か見逃しているような気がするのですが、オールド・マニュアル・ページには表示されていません。
解決するには?
whileループに配管しているため、サブシェルが作成され、whileループが実行されます。
この子プロセスは自分自身の環境のコピーを持っており、どのような 変数を親に返します(他のUNIXプロセスと同様)。
したがって、ループにパイプを通さないように再構築する必要があります。
別の方法として、例えば関数で実行して
echo
を指定します。
サブプロセスから返されたい。
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bash prints リテラルの改行をエコーする \n
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] Bashで変数が設定されているかどうかを確認する方法は?
-
[解決済み】Bashでファイル名と拡張子を抽出する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】bashでjsonファイルを解析するために、jqの出力にあるダブルクオートを削除する方法は?
-
[解決済み】if [](角括弧)の「[: 引数が多すぎる」エラーの意味)
-
[解決済み] find -exec cp {} でエラー 'find: missing argument to -exec' が発生した場合の解決策。TARGET_DIR + [閉店]。
-
[解決済み] Bashで文字列から改行を削除する方法
-
[解決済み] 値がベースに対して大きすぎる(エラートークンは "08")[重複]
-
[解決済み] echoコマンドでパイピングが効かない [重複]。
-
[解決済み] docker alpine /bin/sh script.sh not found
-
[解決済み] bashで::演算子は何をするのですか?
-
[解決済み] あいまいなリダイレクト」エラーが発生する
-
npm err インストールエラーの解決策