Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

パイプを使ったループの中で使用した変数をループ外で参照できない@bash

      2013/07/15

bashでパイプを使って以下のような処理をすると、ループ内の変数の値をループ外で参照できないようです。

#!/bin/bash
HOGE="hoge"
echo -e "$HOGE" | while read I ; do
    HOGE="$HOGE $I"
    echo "$HOGE"
done
echo "$HOGE"

上記を実行すると結果は以下のようになります。

hoge hoge
hoge

原因はパイプを使うと、パイプの先は別プロセスで処理されるためのようです。つまり上記では、呼び出し元の$HOGEに入っている”hoge”は呼び出し先で参照でき、結果は”hoge hoge”になりますが、ループの外、つまり呼び出し元では呼び出し先の処理が反映されないので、”hoge”になります。

なので、対策は面倒ですが一度ファイルに書き出すのがベストな気がします。

#!/bin/bash
HOGE="hoge"
echo -e "$HOGE" | while read I ; do
    HOGE="$HOGE $I"
    echo "$HOGE" > tmp
done
HOGE=`cat tmp`

 - IT技術 ,

336px

Message

メールアドレスが公開されることはありません。

  関連記事

no image
サン電子 USBラジオRDPC-101/S購入

自宅にラジオを聞く環境がなかったので、PCで手軽にラジオが聞けるというUSB接続 …

no image
ApacheのNameVirtualHostのデフォルトサイト設定(含SSL)@CentOS 5

CentOS 5 のApacheで、名前ベースのバーチャルホストを構築してみた。 …

no image
オフラインファイルの削除@Windows XP

Windowsにはオフラインフォルダといって、ネットワーク共有のファイルをネット …

no image
google analyticsのリアルタイム表示を使ってみた

google アナリティクスが、リアルタイム表示に対応したようです。 申し込めば …

no image
グループへのユーザの追加@Linux

グループへユーザを追加する方法。 # gpasswd -a user group …

no image
TCP Wrapper の設定チェック@Linux

昔からあるアクセス制限の方法として、TCP Wrapperがあります。 /etc …

no image
無変換キーをWindowsキーに変更する@Fedora 17

日本語キーボードには、無変換キーがあるが、Linux では使う機会がないので、W …

no image
Oprofile @ RHEL5.5 on KVM

システムのプロファイルに役に立つOpfofileですが、KVM上でOprofil …

no image
Suicaでネット決済@モバイルSuica

モバイルSuicaってネット決済できるみたい。 決済方法を見ると、ショッピングサ …

no image
Search Everything 日本語版

WordPressのページ機能でページを作成しても、検索窓の検索対象になりません …