2016-04-14 154 views
1

要删除bash中特定字符串后的所有字符,我发现有两种方法可以使用//或%%。Bash脚本:%%和//之间的差异

例如,如果我想重命名具有“这是总共83018个文件的505文件”格式的文件。我可以通过删除“of”字符串后面的所有内容来重新命名它们,以便使用这两种方法仅命名为“这是505文件”。

newfilename=${filename//of*} 

newfilename=${filename%%of*} 

两者的运行时这些时, “的” 串后删除所有字符。

我想知道使用%%和//删除部分字符串时是否存在差异,以及是否存在应该使用另一个字符串的情况。

由于

+4

'男人bash'是你最好的选择 – anubhava

+1

'男人的bash '从来不是你最好的选择。 –

+1

@ZephyrPellerin:你为什么这么说? 'info bash'更容易导航,但手册页包含所有相同的信息。 –

回答

3

它们是两个不同的功能

${string//find/replace} 

${string%%pattern} 

例如

$ var="here of there of"; echo ${var//of} 
here there 

,如果你不提供替换字符串,这是一个简单的删除

$ var="here of there of"; echo ${var%%of} 
here of there 

这需要最长的串匹配模式