![C-Shell 中的字符串与包含通配符运算符的字符串进行比较](https://linux22.com/image/105610/C-Shell%20%E4%B8%AD%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%8E%E5%8C%85%E5%90%AB%E9%80%9A%E9%85%8D%E7%AC%A6%E8%BF%90%E7%AE%97%E7%AC%A6%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BF%9B%E8%A1%8C%E6%AF%94%E8%BE%83.png)
我需要将用户输入的可能包含通配符的模式与给定扩展名进行比较。例如,如果输入是,我会将给定输入目录中的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