【问题标题】:Test the first 3 chars in a looong string (efficiently)测试 looong 字符串中的前 3 个字符(有效)
【发布时间】:2010-01-13 08:41:59
【问题描述】:

如果我将一个长字符串存储在一个变量中并且需要测试该字符串是否以字母 abc 开头,那么最有效的测试方法是什么?

当然,您可以回显字符串并将其通过管道传输到 grep/awk/sed 或类似的东西,但没有更有效的方法(不需要扫描整个字符串?)?

我可以为此使用 case 语句吗,例如

case $var in
    ^abc) doSomething;;
esac

?

你好,奥利弗

【问题讨论】:

    标签: shell


    【解决方案1】:

    在 Bash 中,有一个子字符串运算符:

    mystring="abcdef blah blah blah"
    
    first_three=${mystring:0:3}    
    

    之后$first_three 将包含“abc”。

    【讨论】:

      【解决方案2】:

      grep 并不需要扫描整个字符串。只需使用echo "$string" | grep '^abc'

      如果你真的想要效率,不要使用 shell 脚本。

      【讨论】:

      • +1 这是一个很好的观点。我想我会坚持下去,看看性能是否真的是个问题。
      【解决方案3】:
      case "$var" in
        abc*) doSomething ;;
      esac
      

      【讨论】:

        【解决方案4】:

        使用 shell 内部是比调用外部命令更有效的方法

        case "$string" in
          abc* ) echo "ok";;
        esac
        

        或者如果你有现代的 shell,比如 bash

        if [ "${string:0:3}" = "abc" ] ;then
           echo "ok"
        fi
        

        【讨论】:

          【解决方案5】:

          这应该是有效的:

          if [[ "$a" == abc* ]]
          

          【讨论】:

            【解决方案6】:

            我会使用 grep:

            if [ ! -z `echo $string | grep '^abc'` ]
            

            但是对于你切割的品种,使用切割

            if [ `echo $string | cut -c 1-3` = "abc" ]
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-11-18
              • 1970-01-01
              • 2011-07-05
              • 2011-11-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多