【问题标题】:KornShell - expr index command not workingKornShell - expr 索引命令不起作用
【发布时间】:2013-10-09 06:00:41
【问题描述】:

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

试图从字符串“filename_newpart_logic”中获取“logic”的索引

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

但结果是 expr: syntax error

我在一些在线命令编辑器中尝试过同样的方法,它运行良好,但在 shell 中却不行。 ksh 版本已经很老了。如果有任何其他语法/替代方法可以实现这一点,请告诉我。

【问题讨论】:

标签: shell unix scripting ksh


【解决方案1】:

首先,我认为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 中也应该可以工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-14
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多