Intenté concatenar archivos de texto en subcarpetas e intenté:
cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1}/book.txt > out$var
Sin embargo, esto no devolvió nada. Entonces, intenté agregar una 'subcarpeta2' no existente
cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1,subfolder2}/book.txt > out$var
Y esta vez funcionó, concatenando los archivos con éxito. ¿Por qué sucede esto?
bash
cat
brace-expansion
CDPF
fuente
fuente

echolugar decatpara ver qué línea de comando tiene. (O usarset -xpara depurar)Respuestas:
Por definición, la expansión de llaves en GNU Bash requiere una expresión de secuencia o una serie de valores separados por comas:
Puede leer el manual para más detalles.
Algunas muestras simples:
fuente
{subfolder1}evalúa a{subfolder1}, ya que no hay alternativas. Usar en susubfolder1lugar.fuente
csh(de donde proviene la expansión de llaves),tcshofish.Las llaves solo se expandirán si tienen cadenas separadas por coma, por ejemplo, {abc, def} o rango, por ejemplo, {a..e} especificado entre ellas.
En su caso, puede escribir la subcarpeta1 sin encerrarla entre llaves, ya que no es necesario
fuente
/path/{a,}/filenameexpande a las dos cadenas/path/a/filenamey/path//filename, lo que puede ser no deseado.ambiguous redirectsi intentas redirigir a un archivo dado por una variable sin comillas que no tiene valor, por ejemploecho 'hello' >$idontexist.> *.txtcon varios.txtarchivos, o> $filesi$filecontiene espacios en blanco. Pero, por supuesto, no hay nada ambiguo en darcatmúltiples argumentos