在编译脚本时,我遇到了命令do f=${file##*/}
。我很想知道这一行中的##
是什么意思。感谢您提前回复
答案 0 :(得分:12)
在bash
中,它会删除前缀模式。
在这里,它基本上为您提供了最后一个/
路径分隔符之后的所有内容(通过删除前缀*/
,任意数量的字符后跟/
):
pax> fspec=/path/to/some/file.txt
pax> echo ${fspec##*/} # greedy remove */ at start
file.txt
还有一个 - #
变体,它是一个非贪婪的匹配和后缀的等价物:
pax> echo ${fspec#*/} # non-greedy remove */ at start
path/to/some/file.txt
pax> echo ${fspec%%/*} # greedy remove /* at end
pax> echo ${fspec%/*} # non-greedy remove /* at end
/path/to/some
##*/
和%/*
大致相当于您分别从basename
和dirname
获得的内容,但在bash
内,所以您不必调用外部程序:
pax> basename $fspec
file.txt
pax> dirname $fspec
/path/to/some