$ {0 ## * /}和$ {0%/ *}如何工作?


Answers:


38

这些不是正则表达式,它们是Bash参数扩展的示例:用其值替换变量或特殊参数。Wooledge Wiki有一个很好的解释

基本上,在您的示例中,${0##*/}翻译为:

对于变量$ 0和模式'/',这两个哈希值从参数的开头开始,删除最长(或贪婪)匹配项,直到模式为止。

因此,$0文件名在哪里,例如$HOME/documents/doc.txt,则该参数将扩展为:doc.txt

同样,对于${0%/*},模式/与参数(the )的末尾进行%匹配,其中删除了最短或非贪婪的匹配–在上面的示例中这将为您提供$HOME/documents

另请参阅Bash Hacker's Wiki上的文章。


2
所以...他们不想使用basenamedirname吗?:D
亚伦·D·马拉斯科

8
一个优点是参数可疑不会产生子流程...
jasonwryan 2011年

@jasonwryan,能否在以上两个示例中详细说明*的功能?还是为什么我们必须在这里放*。具体而言,在第一个示例中,*放在//之前;而在第二个示例中,*放在/之后。根本的区别是什么?谢谢。
user785099 2011年

3
标记(*)表示将删除所有包括模式在内的所有内容。因此,对于参数的开头#,,它在左侧,而在结尾处,%从右开始。
jasonwryan 2011年

5
它不是bash特定的,而是由POSIX 指定sh
nyuszika7h 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.