Eu tenho 2 variáveis:
file1=file1_*.txt
file2=file2_*.txt
Os nomes reais dos arquivos são: file1_FY24Q3.txt
e file2_FY24Q3.txt
e eles mudam a cada trimestre. Quero concatenar esses vars em uma string. Eu tentei isso:
files="${file1},${file2}"
Mas isso não funciona e echo $files
imprime file1_*.txt,file2_*.txt
.
Por que não funciona e qual a forma correta de concatenar as strings?
porque quando você escreveu
file1=file1_*.txt
, não houve expansão do nome do arquivo (o que geralmente é chamado de "globbing"); apenas a string literal "f", "i", "l", "e", "1", "_", "*", ".", "t"… foi armazenada.Você precisa fazer a expansão do nome do arquivo!
Ou seja, faça algo assim:
A expansão sem aspas
$filename1
de e$filename2
fará com que os globs se expandam, enquanto a configuraçãoIFS
prévia para a string vazia evitará a divisão de palavras (o que, de outra forma, bagunçaria os padrões com espaços em branco).Observe que o array
actual_files
agora conterá todas as correspondências produzidas pelos globs: pode haver mais de dois. Se um dos padrões não corresponder,nullglob
fará com que ele seja removido em vez de retornar o padrão não modificado.Outra maneira, algo assim