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

Jam*_*mes 2 bash

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

local n=${x##*wlan}
Run Code Online (Sandbox Code Playgroud)

我从来没有见过这种语法,我知道这local意味着函数范围内的一个变量,我只是不确定该${*##}部分,并且google语法相当棘手.

fed*_*qui 6

它会删除变量中最后一个wlan匹配项的所有内容$x.

asldkjflkasjdfljsdwlanalsdkjfkajsdflswlanasdlfaksdlfj
#                 ^^^^               ^^^^
#                     |                  |--->
#                     |                  ${x##*wlan}
#                     ${x#*wlan}
Run Code Online (Sandbox Code Playgroud)

看一个例子:

$ 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
Run Code Online (Sandbox Code Playgroud)

图形:

hello1hello2hello3
#                ^
#    ^           ${x##*hello}
#    ${x#*hello}
Run Code Online (Sandbox Code Playgroud)

Bash参考手册 - 3.5.3 Shell参数扩展:

$ {参数##字}

扩展该单词以生成模式,就像在文件名扩展中一样(请参阅文件名扩展).如果模式匹配参数的扩展值的开头,则扩展的结果是具有最短匹配模式('#'大小写)或最长匹配模式('##'大小写)的参数的扩展值删除.如果参数为'@'或' ',则模式删除操作依次应用于每个位置参数,并且扩展是结果列表.如果参数是使用'@'或' ' 下标的数组变量,则模式删除操作依次应用于数组的每个成员,并且扩展是结果列表.