【问题标题】:What does "local n=${x##*wlan}" mean? [duplicate]“本地 n=${x##*wlan}”是什么意思? [复制]
【发布时间】:2014-05-10 20:35:22
【问题描述】:

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

local n=${x##*wlan}

我从未见过这种语法,我知道local 表示函数范围内的变量,我只是不确定${*##} 部分,而且用谷歌搜索该语法非常棘手。

【问题讨论】:

    标签: bash


    【解决方案1】:

    它会删除直到 $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}

    单词被扩展以产生一个模式,就像在文件名中一样 扩展(请参阅文件名扩展)。如果模式匹配 参数扩展值的开头,然后是 扩展是最短参数的扩展值 匹配模式(“#”大小写)或最长匹配模式( '##' 案例)已删除。如果参数是‘@’或‘’,模式移除 操作依次应用于每个位置参数,并且 扩展是结果列表。如果参数是数组变量 下标为“@”或“”,应用模式移除操作 依次传递给数组的每个成员,展开是 结果列表。

    【讨论】:

      【解决方案2】:

      它被称为参数替换/扩展,更多信息请参见here

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

      【讨论】:

        猜你喜欢
        • 2017-02-01
        • 1970-01-01
        • 2016-07-18
        • 2018-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多