As chaves não funcionam quando existe um único elemento

2

Eu sou capaz de scp arquivos com base em suas extensões como,

 scp sk@localhost:/home/sk/*.{txt,text} .

Mas quando tento scp um único tipo de extensão, ele falha,

 scp sk@localhost:/home/sk/*.{txt} .

Consegui resolver esse erro removendo os colchetes de flor no caso # 2,

Estou curioso para saber por que o uso de colchetes de flor falha no caso, existe apenas o tipo de extensão de arquivo.

    
por Madhavan Kumar 09.07.2015 / 19:11

2 respostas

9

Supondo que você esteja usando o bash, a documentação diz:

A correctly-formed brace expansion must contain unquoted opening and closing braces, and at least one unquoted comma or a valid sequence expression. Any incorrectly formed brace expansion is left unchanged.

Assim, {foo} não é uma expansão de contraventação formada corretamente:

$ bash -c 'echo {foo} {foo,bar}'
{foo} foo bar
    
por 09.07.2015 / 19:19
4

O que você está chamando de "colchetes de flor" normalmente são chamados de "chaves", e a funcionalidade que você está usando é chamada de "expansão de contraventamento". A página man bash documenta desta forma:

   Brace Expansion
       Brace expansion is a mechanism by which arbitrary strings may be generated.
       This mechanism is similar to pathname expansion, but the  filenames  gener-
       ated  need  not  exist.   Patterns to be brace expanded take the form of an
       optional preamble, followed by either a series of  comma-separated  strings
       or  a sequence expression between a pair of braces, followed by an optional
       postscript.  The preamble is prefixed to each string contained  within  the
       braces,  and  the  postscript  is  then  appended to each resulting string,
       expanding left to right.

Quando você coloca apenas uma única extensão nas chaves, não é uma expansão de chave, porque não corresponde a nenhum dos formatos listados (sequências separadas por vírgula ou uma expressão de seqüência entre um par de chaves). Então, não é expandido e, em vez disso, permanece inalterado.

    
por 09.07.2015 / 19:20