2009-05-21

Bash でパイプの使用時に気をつけること

bash スクリプトでパイプを使用するとサブシェルが走る.気をつけるべきは,while のような複合コマンド内で変数を利用する場合である:

i=0
find . -name '*.c' | while read file; do
    let i++
done
echo i

では find した .c ファイルの個数ではなく,0 が表示される.while .. done がサブシェルで実行されるからである.

以下のような workaround がある.

i=0
find . -name '*.c' >| find.out
while read file; do
    let i++
done < find.out
echo i

bashクックブック p.139~

0 件のコメント:

コメントを投稿