如何在Bash中获取文件名的通配符部分
发布时间:2020-12-15 20:59:49 所属栏目:安全 来源:网络整理
导读:这个问题可能已经被问过了,但我不知道怎么说得好.我是bash脚本的新手…… 假设我在目录中有一堆文件,其名称如下: file1_pre.extfile2_pre.extfile3_pre.extdifferent_tmp.ext 我可以使用通配符来过滤感兴趣的文件: for f in *_pre.extdo echo $fdone 但是,
这个问题可能已经被问过了,但我不知道怎么说得好.我是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手册页的“参数扩展”部分. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |