Eu estava tentando concatenar arquivos de texto em subpastas e tentei:
cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1}/book.txt > out$var
No entanto, isso não retornou nada. Então, tentei adicionar uma 'subpasta2' inexistente
cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1,subfolder2}/book.txt > out$var
E desta vez deu certo, concatenando os arquivos com sucesso. Por que isso acontece?
bash
cat
brace-expansion
CDPF
fonte
fonte
echo
vez decat
para ver qual linha de comando você obteve. (Ou usarset -x
para depuração.)Respostas:
Por definição, a expansão de chaves no GNU Bash requer uma expressão de sequência ou uma série de valores separados por vírgula:
Você pode ler o manual para obter detalhes.
Algumas amostras simples:
fonte
{subfolder1}
avalia como{subfolder1}
, já que não há alternativas. Use emsubfolder1
vez disso.fonte
csh
(de onde vem a expansão do suporte)tcsh
oufish
.O aparelho somente será expandido se eles tiverem seqüências de caracteres separadas por coma, por exemplo {abc, def} ou intervalo, por exemplo {a..e} especificados entre eles.
No seu caso, você pode simplesmente escrever a subpasta1 sem colocá-la entre chaves, pois não há necessidade disso
fonte
/path/{a,}/filename
expande para as duas cadeias/path/a/filename
e/path//filename
, o que pode ser indesejável.ambiguous redirect
se tentar redirecionar para um arquivo fornecido por uma variável não citada que não tem valor, por exemploecho 'hello' >$idontexist
.> *.txt
em vários.txt
arquivos, ou> $file
se$file
contiver espaço em branco. Mas é claro que não há nada ambíguo em darcat
vários argumentos