代码之家  ›  专栏  ›  技术社区  ›  ldog

Linux:shell内置字符串匹配

  •  1
  • ldog  · 技术社区  · 16 年前

    我试着更熟悉在linux中使用shell中提供的内置字符串匹配功能。我遇到了这些人 posting ,他举了一个例子

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

    我试过了,它照广告上说的做,但我不明白 $,{},#,*,| 正在做,我试图寻找一些参考网上或在手册,但我找不到任何东西。有人能给我解释一下这是怎么回事吗?

    4 回复  |  直到 16 年前
        1
  •  3
  •   Mark Rushakoff    16 年前

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

    所以 ${a#*|} 返回所有内容 之后 这个 | ,和 ${a%|*} 返回所有内容 之前 这个 | .

    如果你遇到需要贪婪匹配的情况,你会使用 ## %% .

        2
  •  1
  •   nc3b    16 年前

    看一看 this .

    ${string%substring}
    

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

    ${string#substring}
    

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

    编辑:

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

    我推荐阅读 this

        3
  •  1
  •   Dennis Williamson    16 年前

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

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

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

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

    mystring="1234567"
    echo ${mystring#*4}  # produces '567'
    
        4
  •  1
  •   Dennis Williamson    16 年前

    这些特性和其他类似的有用特性在 Shell Parameter Expansion Bash参考手册的一节。这是另一个非常好的 reference .