2013-10-02 46 views
1

我想从KornShell(ksh)中的字符串获取特定子字符串的索引,但我得到的只是语法错误。下面是我使用KornShell - expr索引命令不起作用

试图从字符串“filename_newpart_logic”

使用的命令是expr index "$string1" "logic"

得到的“逻辑”索引中的语法,但结果是expr的:语法错误

我在一些在线命令编辑器中尝试过,并且它完美地工作,但不在shell中。 ksh版本很旧。请让我知道是否有任何其他语法/替代方法来实现这一点。

+0

的可能重复(http://stackoverflow.com/questions/ 5031764 /位于某个字符串内的字符串 - 使用-linux-shell-script) –

+2

'expr'是一个外部命令,与您的shell无关。您的'expr'版本似乎不支持'index'命令,因为Mac OS X附带的版本是正确的(例如)。 – chepner

回答

0

首先,我不认为expr index做什么你认为它

从一个系统,它 “作品”:

> string1=filename_newpart_logic 
> expr index "$string1" logic 
2 
> 

man expr

 index STRING CHARS 
       index in STRING where any CHARS is found, or 0 

注意“任何” - 即这个命令告诉你,字母“l”,“o”,“g”,“i”,“c”中任何字母的第一次出现在哪里,我认为是不是wh你正在寻找

假设正确答案是17,这里是做纯ksh93的一种方式:

> : ${string1/logic*};print $((${#string1}-${#.sh.match})) 
17 
> 

如果你的KSH太旧有.sh复合变量,你可以这样做这一点:[?使用Linux shell脚本在字符串中的字符串的位置]

> t=${string1%%logic*};print ${#t} 
17 
> 

应该工作,即使在ksh88