bitスマートフォン用の表示で見るbitこの広告は、90日以上更新していないブログに表示しています。2015-01-31bashのwhileループ内の変数をループ外で使うbash化石みたいな問題。知られていることだが、下記のような各行を足し算するシェルスクリプトを書くと、最後の結果が0になってびっくりする。0これはwhile等の制御文だったかパイプの先だったか忘れたが、bashが別プロセス起こしちゃうんで、戻ってくるときにせっかく変更した変数の内容が破棄されるかららしい。FAQとかにexecでファイルディスクリプタを一時的に変更して云々な話が書かれていたりするが、現在の超高度に発達したSIerの開発現場において、そんなマイナーなテク使われても誰も読めなくて迷惑するのでやめてほしい。あと、一時ファイルにwhileループごとに値を書き出すのもやめて。疲労感を無駄に積み増すんじゃない。よい解決方法は、bashやめてPerlなりPythonなりまともな言語で書く。現在の超高度に発達したSIerの開発現場では、言語一つ変更するのに、周囲とのネゴとか試験仕様書の更新とか、誰も幸せにならないエネルギーが必要なので、シェルスクリプトの範囲内で何とかしてみる方法を考えてみた。書くと16倍(当社比)くらいすっきり感が出ると思う。0}つまり、while部分を別関数に切り出す。切り出しただけなので、行数はそれほど変わらない。ファイル読み込み中にエラーが出た場合の処理を書きたい場合も容易に拡張できる。"rc=$?"rc=1欠点は、"total="のパイプより前のコマンドでエラーが出ても$?が0になってしまう点で、そこのところはあまりいい書き方思いつかないので、まじめに直前にファイル存在チェック書いたほうが読みやすくてよいと思う。bashを使わないのが正解。ファイルの中身が文字列としてメモリに全展開されるので、ファイルサイズが小さいことが保証されていない限りお勧めしない。月別アーカイブはてなブログをはじめよう!iwstttyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。