这个问题可能已经被问过了,但我不知道怎么说得好.我是bash脚本的新手……
file1_pre.ext file2_pre.ext file3_pre.ext different_tmp.ext
for f in *_pre.ext do echo $f done
解决方法
${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 举报,一经查实,本站将立刻删除。