KornShell - expr索引命令不起作用

时间:2013-10-02 18:18:16

标签: shell unix scripting ksh

我试图从KornShell(ksh)中的字符串中获取特定子字符串的索引,但我得到的只是语法错误。以下是我正在使用的语法

尝试从字符串“filename_newpart_logic”

获取“逻辑”索引 使用的

命令是expr index "$string1" "logic"

但结果是expr:语法错误

我在一些在线命令编辑器中尝试过相同的操作,但它完美无缺,但不在shell中。 ksh版本很老了。如果有任何其他语法/替代方法可以实现此目的,请告诉我。

1 个答案:

答案 0 :(得分: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

注意“any” - 即此命令告诉您字符串中第一次出现任何字母“l”,“o”,“g”,“i”,“c”的位置,我认为不是你想要的

假设正确的答案是17,这是纯ksh93中的一种方法:

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

如果你的ksh太旧而没有.sh复合变量,你可以这样做:

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

甚至可以在ksh88中使用