测试looong字符串中的前3个字符(有效)

时间:2010-01-12 23:48:16

标签: shell

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

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

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

case $var in
    ^abc) doSomething;;
esac

Greets,Oliver

6 个答案:

答案 0 :(得分:3)

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

mystring="abcdef blah blah blah"

first_three=${mystring:0:3}    

之后$first_three将包含“abc”。

答案 1 :(得分:1)

这应该是有效的:

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

case "$var" in
  abc*) doSomething ;;
esac

答案 4 :(得分:1)

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

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

或者如果您有现代shell,例如bash

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

答案 5 :(得分:0)

我会用grep:

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

但是对于多样性你削减使用切割

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