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

おすすめ記事