significado de {0 [7-9], 1 *, 2 *}

0

O que o comando abaixo fará e qual saída ele fornecerá?

echo "{$begin_dt/{0[7-9],1*,2*},$dates/*,$next_dt/0[0-6]}"

Onde $begin_dt e $next_dt são datas.

    
por mmk 29.03.2017 / 13:13

1 resposta

2

Há uma pequena diferença entre a string no título da pergunta e a string na pergunta em si. Ou seja, o último está entre aspas, o que está no título não é.

Fora , as chaves {...} expand para a cadeia ao lado das chaves concatenadas a todas as cadeias separadas por vírgula dentro das chaves. Ou seja, string{this,that} expande para stringthis e stringthat , evitando que você repita a parte comum.

A nomeação de nomes de arquivo aconteceria depois disso, então algo como dir/{0[7-9],1*,2*} expandiria para dir/0[7-9] , dir/1* e dir/2* , todos os quais seriam então expandidos para nomes de arquivos correspondentes.

Se os nomes dos arquivos forem dias do mês em números de dois dígitos, eles corresponderão aos números 07 a 29. (mas não 30 ou 31!)

O conjunto externo de chaves no exemplo seria expandido de forma semelhante.

Por dentro aspas, as chaves não são nada de especial, e nem a expansão do nome do arquivo é feita, então tudo o que é expandido são as variáveis.

Isso no Bash e outros shells que possuem expansão de chaves, não é um recurso do POSIX sh.

    
por 29.03.2017 / 13:36