業務上処理件数を調べる必要があったため軽くスクリプトを書くつもりが変数が初期化される現象に遭遇してはまった。
最初書いたスクリプトはこちらです。
特に問題ないように見えますが、最後のecho文の結果が0(zero)になります。
Google先生に聞くと下記のサイトを教えて下れました。
http://www.edwardawebb.com/linux/scope-issue-bash-loops
それで修正したスクリプトがこちら。正しくカウントできました。
ではなぜこの現象が起きるかというとパイプ(|)からのstdinはいつもsubshellを使うそうです。なのでループの中のcountはループ内の変数になってしまいます。
while文前パイプを使った場合よく起きるそうです。w
上で修正したスクリプトは自分のスタイルではないので下記のように見やすく修正しました。
No comments:
Post a Comment