私のLaTeXワークフローのための単純な "明確な目標"を書いている間、私は過去に受け入れたばかりの細部に気づいた。
私はこのようなfind
機能使用while
に標準入力からのリダイレクトを使用して長い時間前から働いていた例:
while ... ; do ... done < <(find ... ... ...)
を。自分の無知で
私はそのためと予想さ:
while ... ; do ... done < $(find ... ... ...)
はそうではありません同じことを、やりました。
私はいくつかしました面白いグーグルが、私が見つけたのは説明なしの例でした。多分、誰かがこれをうまく乗っ取っているのでしょうか、あるいは違いが描かれている場所に私を向けることができますか?
教祖のために
touch asdf.aux asdf.bbl asdf.idx asdf.glo
AUXFILES=(aux bbl idx glo)
for AUXFILE in "${AUXFILES[@]}"; do\
while IFS= read -r -d '' FILE; do\
echo "deleting ${FILE}\n";\
done < <(find . -maxdepth 1 -type f -name "*.${AUXFILE}" -print0);\
done
最小例:あなたはそれをより具体的にするために合うようにタイトルを編集すること自由に感じなさい。
aside - all-capsの名前は、オペレーティングシステムやシェルにとって意味のある変数によって使用されます。 [spec](http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html)を引用するために、アプリケーション用に予約されているため、小文字の名前を独自の変数に使用することを検討してください。小文字を含む環境変数名の名前空間は、アプリケーション用に予約されています。アプリケーションは、標準ユーティリティの動作を変更することなく、この名前空間の名前を持つ任意の環境変数を定義できます。* –
(...なぜこれは明示的な環境変数だけでなくシェル変数にも当てはまりますか?あなたが喜んで尋ねた!既存の環境変数の名前でシェル変数を設定することは、暗黙のうちに後者を上書きすることになります。したがって、 'export PATH'を使っている人は、' PATH'があらかじめ環境になければ、本当にそうしています。 –
別のノートでは、常にNULで区切られたストリームを使用してファイル名を渡します。現在のコードでは、名前に改行が付いたファイル、つまり 'touch $ 'foo \ nbar'で作成されたファイルを扱うことはできません。/$/n/etc/passwd \ n/hello.aux '' - あなたのコードが'/etc/passwd'を削除しようとしたくないのであれば、それは特に重要です。どの改行がファイル名の一部であったのか、ファイル間の区切り文字の一部だったのか? –