Use um asterisco nas variáveis

1

Eu quero catar todos os arquivos para um novo arquivo em um script bash.

Por exemplo, existem três arquivos no meu diretório: - file_a.txt - arquivo b.txt - arquivo (c) .txt

Quando escrevo o seguinte, funciona sem problemas:

cat "file"*".txt" >> out_file.bak

Não, quero torná-lo mais flexível / limpo usando uma variável:

input_files="file"*".txt"
cat $input_files >> out_file.bak

Infelizmente isso não funciona. A questão é por quê? (Quando eu ecoar input_files e executar o comando no terminal, tudo está bem. Então, por que não funciona no script bash?)

    
por netblognet 13.07.2017 / 13:54

3 respostas

1

Depende de quando você quer fazer a expansão:

Quando você define a variável:

$ files=$(echo a*)
$ echo $files
a1 a2 a3
$ echo "$files"
a1 a2 a3

Quando você acessa a variável:

$ files=a*
$ echo "$files"
a*
$ echo $files
a1 a2 a3
    
por 13.07.2017 / 14:59
4

Você está perdendo um $ no comando cat , que usa input_files . Experimente

cat $input_files >> out_file.bak
    
por 13.07.2017 / 14:10
2

Você terá que ter mais cuidado se tiver nomes de arquivos contendo espaços em branco. Nesse caso, use uma matriz:

input_files=( "file with space."*.txt )
cat "${input_files[@]}" >> out_file.bak
    
por 13.07.2017 / 20:41