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

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

我对在 shell 脚本中发现的以下正则表达式感到非常困惑:

${0##*/}
${0%/*}

它们如何工作?

答案1

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

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

对于变量 $0 和模式 '/',两个哈希值的意思是开始的参数,删除最长(或贪婪)匹配 - 直到并包括模式。

那么,其中$0是文件名,例如 ,$HOME/documents/doc.txt则参数将扩展为:doc.txt

类似地,对于${0%/*},模式/结尾参数(%),删除最短或非贪婪匹配 - 在上面的示例中将为您提供$HOME/documents

另请参阅有关的文章Bash 黑客维基

相关内容