2010-11-02 114 views
13

我需要检查变量是否具有以指定子字符串开头的字符串值。KSH检查字符串是否以子字符串开头

在Python这将是这样的:

foo = 'abcdef' 
if foo.startswith('abc'): 
    print 'Success' 

什么是KSH检查是否STRIG $foo开始与子bar最明确的方法是什么?

回答

23

这很简单,但看起来有点奇怪:

if [[ "$foo" == abc* ]]; then ... 

人们会认为KSH将扩大在当前目录下的文件的模式,而是,它的模式匹配。不过,您需要[[。单[将无法​​正常工作。如果foo中没有空格,则引号不是必需的。

+0

在双括号内,即使'$ foo'为空或未设置,也不需要引号。 – 2010-11-02 18:32:24

+0

该解决方案看起来完全像我一直在寻找的东西。但不幸的是,它不起作用在我的ksh。它看起来像ksh88,我猜这些技巧太老了。 – z4y4ts 2010-11-03 09:30:51

+0

如果'$ foo'中包含“=”,该怎么办? – user443854 2013-01-18 16:40:35

6

你也可以做正则表达式匹配:

if [[ $foo =~ ^abc ]] 

对于更为复杂的模式,我建议使用一个变量,而不是直接把图案测试:

bar='^begin (abc|def|ghi)[^ ]* end$' 
if [[ $foo =~ $bar ]] 
17

另外:

foo='abcdef' 
pattern='abc*' 

case "$foo" in 
    $pattern) echo startswith ;; 
    *) echo otherwise ;; 
esac 
+0

适用于便携式解决方案 – 2010-11-03 06:56:03

+1

您当然不需要临时变量。 'abc'*中的$ foo)echo yes ;; esac' – tripleee 2013-08-08 07:59:00

+1

便携式返回solaris 9/bin/sh和@dieeee的简化以上作品 – lamont 2013-10-15 23:48:29

相关问题