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

它应该有效。您需要通过运行以下命令来显示 $pattern 的值: echo "$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

相关内容