私は単純なことをしたいだけです。私は、ディレクトリ内の以下のファイルを得た:rmは私がここで期待どおりに動作しないのはなぜですか?
AppInterface.h baa PEMsg.h PluginInterface.h
その後、私はコマンドを発行します。baa
は削除されません、私の失望に
ls | grep -v ".h" | rm -rf
を。しかし、これは:
ls | grep -v ".h"
は、私が期待している通りです。ですから、問題はrm
が入力をどのように受け取るのかということですが、理由はわかりません。 cshとbashの両方でこれを試してみました。
ここから 'rm'は何を入力しますか?そしてその違いはなぜですか? – nakiya
Rmは削除するファイルのリストをコマンドラインからのみ取得します。バッククォート ''バージョンはlsとgrepを実行し、rmのコマンドラインで出力を置き換えます。 xargsはstdinからの入力を受け取り、コマンドライン引数として入力を使ってコマンド(この場合はrm -rf)を呼び出します。 xargsは対処する入力が多い場合や、コマンドに渡される前に入力に複雑な処理が必要な場合に優れています。 –
他に何もない場合は、読みやすいようにバッククォートの代わりに '$(...)'を使用する必要があります。 – Sorpigal