shell脚本中的##是什么意思

时间:2013-04-16 05:06:36

标签: bash shell-exec

在编译脚本时,我遇到了命令do f=${file##*/}。我很想知道这一行中的##是什么意思。感谢您提前回复

1 个答案:

答案 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

##*/%/*大致相当于您分别从basenamedirname获得的内容,但在bash内,所以您不必调用外部程序:

pax> basename $fspec
file.txt

pax> dirname $fspec
/path/to/some