> かずま さん
質問文の読み込みと、返信をありがとうございます!
> ファイル名にスペースが入っているんでしょうか?
はい、入っています。
> for f in $(<command>); do ..
盲点でした。ありがとうございます。
> for の do 中の cat $f
読み込みに失敗するファイルがあり、cat "$f" だと読んでくれました。
> xargs -d '\n'
xargs: illegal option -- d と出ました。
GNU専用でMacには無いオプション、と、どこかで読んだ気がします。
現環境(Mac)では、改行ではなくヌル文字区切りで行こうと思います。
> xargs -I{} sh -c 'cat "{}" .. '
動いてくれました。ありがとうございます!
以下は、変数sを作らずに、xargsはヌル文字区切りを使うバージョンです。
コード:
find *.txt -print0 | sort -z -n | xargs -0 -I{} sh -c 'cat "{}"; printf "\n\n\n"' > ../merged.txt
質問文で使用した$(<command>)ですが、コマンド置換と呼ぶそうですね。
質問文のエラーは、変数{}のスコープが切れていたような印象です。
エラーの理由は分かりませんが、替わりが見つかって良かったです。
解決済みとします。ありがとうございました!
---
手続き的なやり方を考えてみました。
コード:
find *.txt | sort -n | while read f; do cat "$f"; printf '\n\n\n'; done > ../merged.txt
xargsを使ったバージョンよりも、読みやすいです……。
関数型の書き方が分かりやすいと信じ、
近い書き方がしたくて質問しましたが、
bashの場合、手続き的に書く方が素直なのかもしれませんね……。
質問前よりも、bashに合わせる気持ちが湧いて来ました。