Bash 中的模式匹配

发布于 2024-08-26 00:21:45 字数 314 浏览 4 评论 0原文

这是一个获取文件名不同部分的示例,

bash-3.2$ pathandfile=/tmp/ff.txt  
bash-3.2$ filename=$(basename $pathandfile)  
bash-3.2$ echo $filename    
ff.txt    
bash-3.2$ echo ${filename##*.}     
txt    
bash-3.2$ echo ${filename%.*}    
ff    

我想知道模式中的 ## 和 % 是什么意思。模式匹配是如何工作的?

谢谢和问候!

Here is an example to get different parts of a filename

bash-3.2$ pathandfile=/tmp/ff.txt  
bash-3.2$ filename=$(basename $pathandfile)  
bash-3.2$ echo $filename    
ff.txt    
bash-3.2$ echo ${filename##*.}     
txt    
bash-3.2$ echo ${filename%.*}    
ff    

I was wondering what does ## and % mean in the patterns. How is the patten matching working?

Thanks and regards!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你是年少的欢喜 2024-09-02 00:21:45

bash 的联机帮助页显示:

${参数#word}
${参数##word}

<块引用>

删除匹配的前缀模式。该单词被扩展以产生一个模式,就像
在路径名扩展中。如果模式与参数值的开头匹配,则扩展的结果是扩展后的参数值
最短匹配模式(# 情况)或最长匹配模式(
## 案例)已删除。如果参数为@*,则模式去除操作为
依次应用于每个位置参数,展开就是结果
列表。如果参数是下标为 @* 的数组变量,则模式
移除操作依次应用于数组的每个成员,并且扩展
是结果列表。

${参数%word}
${参数%%字}

<块引用>

删除匹配的后缀模式。该单词被扩展以产生一个模式,就像
在路径名扩展中。如果模式与扩展的尾部部分匹配
参数的值,那么展开的结果就是展开后的值
已删除最短匹配模式(% 情况)或最长匹配模式(%% 情况)的参数。如果参数为@*,则删除模式
依次对每个位置参数进行运算,展开式为
结果列表。如果参数是下标为@*的数组变量,则
模式移除操作依次应用于数组的每个成员,并且
扩展是结果列表。

The manpage for bash says:

${parameter#word}
${parameter##word}

Remove matching prefix pattern. The word is expanded to produce a pattern just as
in pathname expansion. If the pattern matches the beginning of the value of parameter, then the result of the expansion is the expanded value of parameter with the
shortest matching pattern (the # case) or the longest matching pattern (the
## case) deleted. If parameter is @ or *, the pattern removal operation is
applied to each positional parameter in turn, and the expansion is the resultant
list. If parameter is an array variable subscripted with @ or *, the pattern
removal operation is applied to each member of the array in turn, and the expansion
is the resultant list.

${parameter%word}
${parameter%%word}

Remove matching suffix pattern. The word is expanded to produce a pattern just as
in pathname expansion. If the pattern matches a trailing portion of the expanded
value of parameter, then the result of the expansion is the expanded value of
parameter with the shortest matching pattern (the % case) or the longest matching pattern (the %% case) deleted. If parameter is @ or *, the pattern removal
operation is applied to each positional parameter in turn, and the expansion is the
resultant list. If parameter is an array variable subscripted with @ or *, the
pattern removal operation is applied to each member of the array in turn, and the
expansion is the resultant list.

不必在意 2024-09-02 00:21:45

来自 http://tldp.org/LDP/abs/html/string-manipulation .html

${字符串##子字符串}

从 $string 前面删除 $substring 的最长匹配项。

${字符串%子字符串}

从 $string 后面删除 $substring 的最短匹配。

From http://tldp.org/LDP/abs/html/string-manipulation.html:

${string##substring}

Deletes longest match of $substring from front of $string.

and

${string%substring}

Deletes shortest match of $substring from back of $string.

盛装女皇 2024-09-02 00:21:45

请参阅http://tldp.org/LDP/abs/html/string-manipulation .html

  • ${string##substring}
    • 删除 $string 前面 $substring 的最长匹配项。
  • ${字符串%子字符串}
    • 从 $string 后面删除 $substring 的最短匹配。

See http://tldp.org/LDP/abs/html/string-manipulation.html.

  • ${string##substring}
    • Deletes longest match of $substring from front of $string.
  • ${string%substring}
    • Deletes shortest match of $substring from back of $string.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文