提取当前文件夹名称的变量替换如何在Bash中起作用?

时间:2017-12-04 07:56:17

标签: bash shell

我使用下面的脚本来获取bash中当前文件夹的名称:

${PWD##*/}

这是我在this question中看到的一个技巧。但是,我实际上并不理解语法##*/的含义(除了*/可能意味着'任何字符直到斜杠')。

任何人都可以解释一下吗?如果这是一个愚蠢的问题,请提前道歉!

1 个答案:

答案 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 :没有愚蠢的问题