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