这个问题可能已经被问过了,但我不知道该怎么说。我是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%_*}
下划线后删除所有内容的操作。如果将其中的%
as加倍,${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手册页的“参数扩展”部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句