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

时间:2014-04-25 04:40:53

标签: bash shell sh

我怀疑shell脚本
我将描述这个场景,$ file包含我感兴趣的文件名,
考虑$ file可以包含foo.1,foo.2,foo.3这里foo将是常量,
但.1,.2,.3会改变,我想在if语句中用单行测试这个

if [ $file = "foo.[1-9]" ]; then
echo "File name is $file"
fi'

我知道上面的脚本不起作用:)任何人都可以建议我应该参考什么?

2 个答案:

答案 0 :(得分:1)

修剪任何扩展名,然后查看它是否" foo"?

base=${file%.[1-9]}
if [ "$base" = "foo" ]; then
    echo Smashing success
fi

同样,我总是推荐case,因为它具有便携性和通用性。

case $file in
    foo.[1-9] ) echo Smashing success ;;
esac

一开始语法看起来很奇怪,但值得了解。

这两种技术都可以移植到任何兼容Bourne的shell,包括Dash和POSIX sh

答案 1 :(得分:0)

使用[[代替正则表达式匹配。

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