Expansão de *, #,% - O que eles significam? [duplicado]

0
for j in * .* ; do 
    cp $j ../$name-S$i.gid/${j%%. * }$i.${j#*.}
done

Alguém poderia me dizer o que esse loop faz? O que significam * , % e # ?  ( $name é o caminho de um diretório no qual existem -S1.gid ... -Sn.gid directory)

    
por user277585 05.05.2014 / 00:32

1 resposta

3

  • Faz um loop ( for foo in bar; do something; done ) dos arquivos que correspondem aos * e .* globs e
    • cópias ( cp )
      • cada arquivo ( $j ) para
      • um caminho composto de
        • o diretório pai ( ../ )
        • seguido por um caminho de diretório
          • começando com o valor de $name ,
          • seguido por -S ,
          • alguma outra variável desconhecida ( $i )
          • e finalmente .gid/ ,
        • , em seguida, um nome de arquivo começando com
          • a sequência restante após a remoção do final do arquivo ( ${j...} ) da sequência mais longa ( %% ) correspondente à glob . * , significando
            • um ponto
            • seguido por um espaço,
            • seguido por qualquer número de caracteres
            • seguido por um espaço
          • seguido pelo valor de $i ,
          • seguido por um ponto
          • e, finalmente, a sequência restante após a remoção do início do arquivo ( ${j...} ) da string mais curta que corresponde à glob *. , significando
            • qualquer número de caracteres
            • seguido por um ponto.

Tudo isso é explicado em man bash . Este código deve ser simplificado para usar as variáveis citadas para cada uma delas expansões para explicar o que são. Não é sustentável como é IMO.

    
por 05.05.2014 / 00:54