Comparação de strings com strings que contêm operadores curinga no C-Shell

0

Eu preciso comparar uma entrada de padrão pelo usuário que pode conter curingas para uma determinada extensão. Por exemplo, se a entrada for hy*.gif , moverei os arquivos hyland.gif e hyland2.gif em um determinado diretório de entrada para um diretório de saída. Isso deve ser feito caso a caso, em que cada extensão .gif , .tiff e .png é tratada separadamente.

Isso é o que eu tentei:

if("$pattern" =~ *.gif) then

  #move all .gif files to output directory

O corpo da instrução if não é importante. Não consigo obter a expressão para retornar true para o caso de hy*.gif , mas ela retorna true para o caso *leaves\*.tiff

Da mesma forma, para verificar cada arquivo no diretório de entrada, não consigo obter essa expressão para retornar true:

if($file =~ *"$pattern") 

Pelo que entendi, o operador =~ espera apenas curingas do lado direito, o que pode ser o motivo pelo qual ele está me causando problemas

Existe alguma outra maneira de usar =~ ou um comando simples, como o grep, para executar essa verificação? Ou existe uma maneira de fazer com que o operador * seja compatível?

    
por Michael 16.02.2017 / 00:08

1 resposta

1

Deve funcionar. Você precisa mostrar os valores de $ pattern executando: echo "$ pattern". No entanto, você precisa distribuir os componentes if-statement.

if ( "$pattern" =~ *.gif ) then
   echo "pattern matches..."
else
   echo "no match"
endif

Você também pode usar a instrução "switch" em seu cenário:

switch ( "$pattern" )
   case "*.gif":
      echo "GIF ok"
      breaksw

   case "*.png":
      echo "PNG ok"
      breaksw

   default:
      echo "No match"
      breaksw
endsw
    
por 16.02.2017 / 02:54

Tags