주어진 확장자와 와일드카드를 포함할 수 있는 사용자 입력 패턴을 비교해야 합니다. 예를 들어 입력이 이면 지정된 입력 디렉터리의 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