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
echo
lugar decat
para ver qué línea de comando tiene. (O usarset -x
para 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 susubfolder1
lugar.fuente
csh
(de donde proviene la expansión de llaves),tcsh
ofish
.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,}/filename
expande a las dos cadenas/path/a/filename
y/path//filename
, lo que puede ser no deseado.ambiguous redirect
si intentas redirigir a un archivo dado por una variable sin comillas que no tiene valor, por ejemploecho 'hello' >$idontexist
.> *.txt
con varios.txt
archivos, o> $file
si$file
contiene espacios en blanco. Pero, por supuesto, no hay nada ambiguo en darcat
múltiples argumentos