テキストファイルをサブフォルダーに連結しようとして、次のことを試みました。
cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1}/book.txt > out$var
しかし、これは何も返しませんでした。だから、存在しない「サブフォルダ2」を追加してみた
cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1,subfolder2}/book.txt > out$var
そして今回はうまくいき、ファイルを正常に連結しました。なぜこれが起こるのですか?
定義により、GNU Bashのブレース展開には、シーケンス式または一連のコンマ区切り値のいずれかが必要です。
ブレース展開されるパターンは、オプションのプリアンブルの形式を取り、その後に一連のコンマ区切りの文字列または中括弧のペア間のシーケンス式が続き、その後にオプションのポストスクリプトが続きます。
詳細は マニュアルを読む を参照してください。
echo {subfolder1}
{subfolder1}
echo {subfolder1,subfolder2}
subfolder1 subfolder2
echo subfolder{1}
subfolder{1}
echo subfolder{1..2}
subfolder1 subfolder2
{subfolder1}
は代替がないため、{subfolder1}
と評価されます。代わりにsubfolder1
を使用してください。
ブレースは、コマ区切りの文字列がある場合にのみ展開されます。 {abc、def}または範囲、たとえばそれらの間に指定された{a..e}.
あなたの場合、それを必要としないので、中括弧で囲まずにサブフォルダ1を書くだけです
cat ./{mainfolder1,mainfolder2,mainfolder3}/subfolder1/book.txt > out$var