Bash shell脚本如何在单行中将文件名与预期文件名进行比较,但扩展名不同

Bash shell脚本如何在单行中将文件名与预期文件名进行比较,但扩展名不同,bash,shell,sh,Bash,Shell,Sh,我对shell脚本有疑问 我将描述场景,$file包含我感兴趣的文件名, 考虑$file可以包含fo。1,fo。2,fo。3,这里的fo将是常数, 但是.1、.2、.3将发生变化,我想在if语句中的单行中测试它 if[$file=“foo.[1-9]”;然后 echo“文件名是$File” fi' 我知道上面的脚本不起作用:)有人能建议我应该引用什么吗?修剪任何扩展,然后看看它是否是“foo” 同样地,我总是喜欢推荐case,因为它具有便携性和多功能性 case $file in foo

我对shell脚本有疑问
我将描述场景,$file包含我感兴趣的文件名,
考虑$file可以包含fo。1,fo。2,fo。3,这里的fo将是常数,
但是.1、.2、.3将发生变化,我想在if语句中的单行中测试它

if[$file=“foo.[1-9]”;然后

echo“文件名是$File”

fi'


我知道上面的脚本不起作用:)有人能建议我应该引用什么吗?

修剪任何扩展,然后看看它是否是“foo”

同样地,我总是喜欢推荐
case
,因为它具有便携性和多功能性

case $file in
    foo.[1-9] ) echo Smashing success ;;
esac
这个语法一开始可能看起来很奇怪,但它很值得了解


这两种技术都应该可以移植到任何与Bourne兼容的shell,包括Dash和POSIX
sh
使用
[[/code>代替正则表达式匹配

if [[ $file =~ ^foo\.[1-9]$ ]] ; ...

这可能是一个解决方案,但是,如果我想严格检查文件foo.1到foo.9,那么我不能这样做吗?是否可以在
If
中的单行中执行此操作?我知道我可以提取扩展名并执行此操作,但我正在检查是否有更好的方法执行此操作。案例解决方案是我正在寻找的解决方案,我想!!:)我在加载后看到了d编辑答案。在第一个示例中,编辑为仅修剪一个位数的扩展名。虽然Ignacio的答案是准确的答案,但我正在为busybox shell编写脚本,似乎正则表达式匹配在那里不起作用。但是案例解决方案工作得非常好,非常感谢。这正是我所寻找的答案,但在busybox shell中不起作用,我知道我在问题中没有提到这一点,但出于好奇,我想问的是,在busybox shell中还有其他解决方案吗?这是一个Bash扩展。busybox没有Bash。我相信我的答案应该可以移植到任何Bourne兼容的shell。如果您使用busybox,
Bash
标记实际上是不正确的,但因为您一直在使用它ady得到了Bash的答案,我不会把它取出来。你们是对的,首先我在Bash上尝试了它,然后我把脚本移到了busybox shell,所以出现了这种混乱。
if [[ $file =~ ^foo\.[1-9]$ ]] ; ...