「cat{foo}」はfooを出力しませんが、「cat{foo,bar}」はなぜ出力されますか?

「cat{foo}」はfooを出力しませんが、「cat{foo,bar}」はなぜ出力されますか?

サブフォルダー内のテキストファイルをリンクしようとしています。

cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1}/book.txt > out$var

しかし、これは何も返しません。したがって、存在しない「subfolder2」を追加してみてください。

cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1,subfolder2}/book.txt > out$var

今回はうまくいき、ファイルが正常にリンクされました。なぜこれが起こるのですか?

答え1

定義に応じて、GNU Bashの中括弧拡張にはシーケンス式またはカンマ区切り値のリストが必要です。

中括弧を拡張するパターンは、オプションの序文、その後に一連のカンマ区切り文字列、または一対の中括弧の間のシーケンス式、その後にオプションのPostScriptの形式を取ります。

あなたはできますドキュメントを読むもっと学ぶ。

いくつかの簡単な例:

echo {subfolder1}
{subfolder1}

echo {subfolder1,subfolder2}
subfolder1 subfolder2

echo subfolder{1}
subfolder{1}

echo subfolder{1..2}
subfolder1 subfolder2

答え2

{subfolder1}{subfolder1}他の選択肢がないためと評価されます。代わりに使用してくださいsubfolder1

答え3

中括弧は、{abc、def}などのカンマ区切り文字列、または{a..e}などの範囲がその間に指定されている場合にのみ拡張されます。

あなたの場合はこれを行う必要がないので、中かっこで囲むことなくsubfolder1を書くことができます。

cat ./{mainfolder1,mainfolder2,mainfolder3}/subfolder1/book.txt > out$var

関連情報