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
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?)
Você está perdendo um $
no comando cat
, que usa input_files
. Experimente
cat $input_files >> out_file.bak
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