C-Shell에서 문자열을 와일드카드 연산자와 비교

C-Shell에서 문자열을 와일드카드 연산자와 비교

주어진 확장자와 와일드카드를 포함할 수 있는 사용자 입력 패턴을 비교해야 합니다. 예를 들어 입력이 이면 지정된 입력 디렉터리의 hy*.gif파일 과 파일을 hyland.gif출력 디렉터리로 이동합니다. hyland2.gif이는 사례별로 수행되며 각 확장자 .gif, .tiff, 및는 .png개별적으로 처리됩니다.

내가 시도한 것은 다음과 같습니다.

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

  #move all .gif files to output directory

if 문의 본문은 중요하지 않습니다. 의 경우에는 true를 반환하는 표현식을 얻을 수 없지만 hy*.gif다음의 경우에는 true를 반환합니다.*leaves\*.tiff

마찬가지로 입력 디렉터리의 모든 파일을 확인하기 위해 이 표현식이 true를 반환하도록 할 수는 없습니다.

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

내가 이해한 바에 따르면 =~운영자는 오른쪽에 와일드카드만 예상하므로 이것이 문제를 일으키는 것 같습니다.

=~grep과 같은 간단한 명령을 사용하여 이 검사를 수행하는 다른 방법이 있습니까 ? 아니면 *연산자 자체를 일치 시키는 방법이 있습니까 ?

답변1

작동해야합니다. echo "$pattern" 명령을 실행하여 $pattern 값을 표시해야 합니다. 그러나 if 문 구성 요소를 분리해야 합니다.

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

시나리오에서 "switch" 문을 최대한 활용할 수도 있습니다.

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

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

   default:
      echo "No match"
      breaksw
endsw

관련 정보