【问题标题】:Linux: shell builtin string matchingLinux:shell 内置字符串匹配
【发布时间】:2010-04-30 16:39:22
【问题描述】:

我正在尝试更熟悉使用 linux shell 中可用的内置字符串匹配的东西。我遇到了这个人posting,他举了一个例子

a="abc|def"
echo ${a#*|}    # will yield "def"
echo ${a%|*}    # will yield "abc"

我试过了,它做了它宣传的事情,但我不明白$,{},#,*,| 在做什么,我尝试在网上或手册中寻找一些参考,但我找不到任何东西。谁能给我解释一下这里发生了什么?

【问题讨论】:

    标签: bash parsing shell wildcard


    【解决方案1】:

    This article in the Linux Journal 表示# 运算符删除左侧最短的匹配项,而% 运算符删除右侧的最短匹配项。

    所以${a#*|} 返回所有之后 |${a%|*} 返回所有之前 |

    如果您遇到需要贪婪匹配的情况,您可以使用##%%

    【讨论】:

      【解决方案2】:

      看看this

      ${string%substring}
      

      删除 $substring 的最短匹配 从 $string 后面。

      ${string#substring}
      

      删除 $substring 的最短匹配 从 $string 前面。

      编辑:

      我不明白 $,{},#,*,| 是什么 正在做

      我推荐阅读this

      【讨论】:

        【解决方案3】:

        通常,${somename} 将替换已定义参数的内容:

        mystring="1234567"
        echo ${mystring}    # produces '1234567'
        

        % 和 # 符号允许您添加修改默认行为的命令。

        星号“*”是通配符;而管道'|'只是一个匹配的字符。让我使用 '4' 的匹配字符做同样的事情。

        mystring="1234567"
        echo ${mystring#*4}  # produces '567'
        

        【讨论】:

          【解决方案4】:

          Bash 参考手册的Shell Parameter Expansion 部分记录了这些功能和其他类似有用的功能。这是另一个非常好的reference

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-02
            • 1970-01-01
            • 2015-08-05
            • 1970-01-01
            相关资源
            最近更新 更多