Existe uma diferença entre as sequências {1,2,3}
e {1..3}
?
Por exemplo, se eu tiver alguns arquivos
file.1
file.2
file.3
e eu quero cat
eles juntos, é seguro usar cat file.{1..3} > file
?
O que eu sei é que isso cat file.*>file
pode causar problemas porque o shell pode expandir os arquivos de maneira aleatória, às vezes (acho que isso depende dos inodes, não é?)
cat file.[123] >file
file.*
não depende dos inodes. Ele sempre os classifica lexicograficamente, o que pode depender da sua configuração de localização.file.{1..3}
que se expande para os três, existindo ou não.cat
erros comfile.[123] not found
ou algo muito útil.Respostas:
{1..3}
e{1,2,3}
produzir o mesmo resultado, mas de maneira diferente.Em geral,
{n1..n2}
(o que veio primeiro a partirzsh
,bash
eksh
copiados-lo mais tarde) onden1
en2
são inteiros produzir todos os números entren1
en2
. Enquanto{x,y,z}
produz três caracteresx
,y
ez
.No seu caso, você está seguro para usar
cat file.{1..3} > file
Agora, no caso de
cat file.*>file
, você usou o shell globbing , que produz todo o nome de arquivo iniciadofile.
e o resultado será classificado com base na ordem de intercalação no código de idioma atual.Você ainda está seguro, mas não mais quando tiver mais de 10 arquivos.
{1..10}
vai te dar1 2 3 4 5 6 7 8 9 10
. Enquanto estiver com globbing, você terá1 10 2 3 4 5 6 7 8 9
fonte
A diferença é que uma é uma lista e a outra uma sequência.
{1,2,3}
se expande para três elementos específicos,1
,2
, e3
.{1..3}
expande para a lista de números entre um e três. Nesse caso específico, eles são iguais e você pode usar um dos dois.file.*
será expandido para todos os arquivos e diretórios no diretório atual cujo nome começa comfile.
. Se você tiverfile.1
,file.2
efile.3
isso também é equivalente aos outros dois.Quanto a causar problemas, não vejo o porquê. Você pode estar pensando em
Essa, porém, é uma questão completamente diferente. O único outro problema que consigo pensar é que seu shell pode não listar os arquivos na ordem correta. Por exemplo:
Para resolver isso, você pode usar em
zsh
vez debash
(veja aqui para detalhes):Em geral, as três abordagens não são as mesmas. Depende do que você quer fazer. Nos casos em que os três retornam a mesma saída, sim, você pode usar qualquer um deles. Não faz diferença. Todas essas expansões são feitas pelo shell e acontecem antes de serem passadas para qualquer comando que as use.
fonte
*
se eu tivesse mais ou igual a 10 arquivos, se eu dependesse da ordem certa?ARG_MAX
arquivos, mas que será muito, muito mais do que 10.cat *
não está bem definida. A saída depende do shell e do ambiente. Veja o comentário de Sebastian ..txt
resolverá o problemafile.*
?Eles são os mesmos, mas depende da versão do bash que você instalou, se eles estiverem disponíveis.
A partir dessa página:
fonte