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 件のコメント:
コメントを投稿