【发布时间】:2010-01-13 08:41:59
【问题描述】:
如果我将一个长字符串存储在一个变量中并且需要测试该字符串是否以字母 abc 开头,那么最有效的测试方法是什么?
当然,您可以回显字符串并将其通过管道传输到 grep/awk/sed 或类似的东西,但没有更有效的方法(不需要扫描整个字符串?)?
我可以为此使用 case 语句吗,例如
case $var in
^abc) doSomething;;
esac
?
你好,奥利弗
【问题讨论】:
标签: shell
如果我将一个长字符串存储在一个变量中并且需要测试该字符串是否以字母 abc 开头,那么最有效的测试方法是什么?
当然,您可以回显字符串并将其通过管道传输到 grep/awk/sed 或类似的东西,但没有更有效的方法(不需要扫描整个字符串?)?
我可以为此使用 case 语句吗,例如
case $var in
^abc) doSomething;;
esac
?
你好,奥利弗
【问题讨论】:
标签: shell
在 Bash 中,有一个子字符串运算符:
mystring="abcdef blah blah blah"
first_three=${mystring:0:3}
之后$first_three 将包含“abc”。
【讨论】:
grep 并不需要扫描整个字符串。只需使用echo "$string" | grep '^abc'。
如果你真的想要效率,不要使用 shell 脚本。
【讨论】:
case "$var" in
abc*) doSomething ;;
esac
【讨论】:
使用 shell 内部是比调用外部命令更有效的方法
case "$string" in
abc* ) echo "ok";;
esac
或者如果你有现代的 shell,比如 bash
if [ "${string:0:3}" = "abc" ] ;then
echo "ok"
fi
【讨论】:
这应该是有效的:
if [[ "$a" == abc* ]]
【讨论】:
我会使用 grep:
if [ ! -z `echo $string | grep '^abc'` ]
但是对于你切割的品种,使用切割
if [ `echo $string | cut -c 1-3` = "abc" ]
【讨论】: