我正在查看我已经继承的bash脚本并遇到过这一行:
local n=${x##*wlan}
我从来没有见过这种语法,我知道local
表示函数范围内的变量,我只是不确定${*##}
部分是什么&#39}谷歌那种语法非常棘手。
答案 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
的最长匹配。