##*/ 在UNIX Shell脚本中的用法

3

请问有人能详细解释一下在UNIX Shell脚本中 ##*/ 是如何工作的吗?我见过它在Korn Shell中的使用。它专门用于删除文件扩展名。

例如: func_write_app_log "o 删除状态文件 ${CIE_STATUS_FILE##*/}"

这里假设文件名为CIE_STATUS_FILE.DAT,则 ##*/ 将显示CIE_STATUS_FILE。


您可以使用这些结构来删除与模式匹配的前缀和后缀。这些由POSIX指定,并在许多shell中工作,例如zsh、bash、ksh甚至是旧版的bourne shell(sh)。参考链接为http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_02。 - Jens
1个回答

5

这也适用于Bash,并在这里进行了描述:

${string##substring}

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

*是通配符,表示匹配任何字符。您的示例将文件路径删除了,而不是扩展名。

$ bazfile='/foo/bar/baz.txt'
$ echo ${bazfile##*/}
baz.txt

要删除扩展名,请使用%

${string%substring}

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

$ echo ${bazfile%.*}
/foo/bar/baz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接