“本地n = $ {x ## * wlan}”是什么意思?

时间:2014-03-31 13:22:31

标签: bash

我正在查看我已经继承的bash脚本并遇到过这一行:

local n=${x##*wlan}

我从来没有见过这种语法,我知道local表示函数范围内的变量,我只是不确定${*##}部分是什么&#39}谷歌那种语法非常棘手。

2 个答案:

答案 0 :(得分:6)

它会移除wlan变量中最后一次$x匹配的所有内容。

asldkjflkasjdfljsdwlanalsdkjfkajsdflswlanasdlfaksdlfj
#                 ^^^^               ^^^^
#                     |                  |--->
#                     |                  ${x##*wlan}
#                     ${x#*wlan}

查看示例:

$ x="hello1hello2hello3"

$ echo "${x##*hello}"  # with two ## it matches the longest matching pattern
3

$ echo "${x#*hello}"   # with one # it matches the shortest matching pattern
1hello2hello3

图形:

hello1hello2hello3
#                ^
#    ^           ${x##*hello}
#    ${x#*hello}

来自Bash Reference Manual - 3.5.3 Shell Parameter Expansion

  

<强> $ {参数##字}

     

这个词被扩展为产生一个模式,就像文件名一样   扩展(请参阅文件名扩展)。如果模式匹配   参数的扩展值的开头,然后是结果   扩展是最短的参数的扩展值   匹配模式('#'情况)或最长匹配模式(   '##'案例)已删除。如果参数为“@”或“”,则删除模式   操作依次应用于每个位置参数,并且   扩展是结果列表。如果参数是数组变量   使用'@'或''下标,应用模式删除操作   依次对阵列的每个成员,扩展是   结果清单。

答案 1 :(得分:3)

它被称为参数替换/扩展,有关详细信息,请参阅here

您的示例会从变量*wlan的开头删除$x的最长匹配。