我使用下面的脚本来获取bash中当前文件夹的名称:
${PWD##*/}
这是我在this question中看到的一个技巧。但是,我实际上并不理解语法##*/
的含义(除了*/
可能意味着'任何字符直到斜杠')。
任何人都可以解释一下吗?如果这是一个愚蠢的问题,请提前道歉!
答案 0 :(得分:2)
来自GNU bash手册https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
$ {参数#字} $ {参数##字}
这个词被扩展为产生一个模式,就像文件名扩展一样(参见文件名扩展)。如果模式匹配参数的扩展值的开头,则扩展的结果是具有最短匹配模式('#'大小写)或最长匹配模式('##'大小写)的参数的扩展值删除。如果参数是'@'或'',则模式删除操作依次应用于每个位置参数,并且扩展是结果列表。如果参数是使用'@'或''下标的数组变量,则模式删除操作依次应用于数组的每个成员,并且扩展是结果列表。
简单解释
假设参数PWD = /home/abc/pqr
Word是匹配*/
的模式。这意味着/home/abc/
。自pqr
以来
没有尾随/
,pqr
与该模式不匹配。
来自GNU bash手册,
最长的匹配模式('##'案例)已删除
##
表示从参数中删除最长匹配模式。这意味着从/home/abc/
移除/home/abc/pqr
。
为您提供pqr
PS :没有愚蠢的问题