use*_*099 44 shell bash parameter wildcards
我对在 shell 脚本中找到的以下正则表达式感到非常困惑:
${0##*/}
${0%/*}
Run Code Online (Sandbox Code Playgroud)
它们是如何工作的?
jas*_*yan 49
这些不是正则表达式,它们是 Bash 参数扩展的例子:用它的值替换变量或特殊参数。Wooledge Wiki 有一个很好的解释。
基本上,在你的例子中,${0##*/}翻译为:
对于变量 $0 和模式 '/',两个散列表示从参数的开头删除最长(或贪婪)匹配 - 直到并包括该模式。
因此,$0文件名在哪里,例如$HOME/documents/doc.txt,,则参数将扩展为:doc.txt
类似地,对于${0%/*},模式/与参数的结尾(the %) 匹配,并删除最短的或非贪婪的匹配——在上面的例子中,它会给你$HOME/documents。
另请参阅Bash Hacker's Wiki上的文章。