微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Bash中获取文件名的通配符部分

这个问题可能已经被问过了,但我不知道怎么说得好.我是bash脚本的新手……

假设我在目录中有一堆文件,其名称如下:

file1_pre.ext
file2_pre.ext
file3_pre.ext
different_tmp.ext

我可以使用通配符来过滤感兴趣的文件

for f in *_pre.ext
do
   echo $f
done

但是,我如何解析/提取前缀,以便我可以获得字符串file1,file2等作为其他东西的文件名?

解决方法

${f%_pre.ext}将扩展为f的值,并删除最终的_pre.ext.

您可以使用${varname< SomeOperator> args}在参数扩展中执行多种字符串操作. %运算符删除尾随字符串.它需要一个通配符参数,所以你可以像${f%_ *}那样删除下划线后的所有内容.如果你在${f %% _ *}中将%加倍,则会删除最长的匹配,因此你会在第一个下划线后杀死所有内容.单个%执行最短匹配,因此它将删除最后一个下划线后的所有内容.使用%_pre.ext它没有什么区别,因为我们正在寻找完全匹配.

#和##运算符类似于%和%%但是在字符串的开头而不是结尾处理.

一个常用的例子是: – 运算符,如果变量为空,则替换认值.

另外,没有运算符的${foo}是编写$foo的另一种方式,但是当你想在变量的值之后立即放置一些文本时,有时可以帮助你:

echo $foobar   # oops,looks for variable called "foobar"
echo ${foo}bar # the value of variable "foo" then literal "bar"

有关完整列表,请参阅任何shell手册页的“参数扩展”部分.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐