我正在查看我继承的bash脚本并遇到这一行:
local n=${x##*wlan}
Run Code Online (Sandbox Code Playgroud)
我从来没有见过这种语法,我知道这local意味着函数范围内的一个变量,我只是不确定该${*##}部分,并且google语法相当棘手.
它会删除变量中最后一个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)
$ {参数##字}
扩展该单词以生成模式,就像在文件名扩展中一样(请参阅文件名扩展).如果模式匹配参数的扩展值的开头,则扩展的结果是具有最短匹配模式('#'大小写)或最长匹配模式('##'大小写)的参数的扩展值删除.如果参数为'@'或' ',则模式删除操作依次应用于每个位置参数,并且扩展是结果列表.如果参数是使用'@'或' ' 下标的数组变量,则模式删除操作依次应用于数组的每个成员,并且扩展是结果列表.