【发布时间】:2014-05-10 20:35:22
【问题描述】:
我正在查看我继承的 bash 脚本并遇到了这一行:
local n=${x##*wlan}
我从未见过这种语法,我知道local 表示函数范围内的变量,我只是不确定${*##} 部分,而且用谷歌搜索该语法非常棘手。
【问题讨论】:
标签: bash
我正在查看我继承的 bash 脚本并遇到了这一行:
local n=${x##*wlan}
我从未见过这种语法,我知道local 表示函数范围内的变量,我只是不确定${*##} 部分,而且用谷歌搜索该语法非常棘手。
【问题讨论】:
标签: bash
它会删除直到 $x 变量中最后一个 wlan 匹配的所有内容。
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:
${parameter##word}
单词被扩展以产生一个模式,就像在文件名中一样 扩展(请参阅文件名扩展)。如果模式匹配 参数扩展值的开头,然后是 扩展是最短参数的扩展值 匹配模式(“#”大小写)或最长匹配模式( '##' 案例)已删除。如果参数是‘@’或‘’,模式移除 操作依次应用于每个位置参数,并且 扩展是结果列表。如果参数是数组变量 下标为“@”或“”,应用模式移除操作 依次传递给数组的每个成员,展开是 结果列表。
【讨论】:
它被称为参数替换/扩展,更多信息请参见here。
您的示例从变量$x 的开头删除了*wlan 的最长匹配项。
【讨论】: