我试图从KornShell(ksh)中的字符串中获取特定子字符串的索引,但我得到的只是语法错误。以下是我正在使用的语法
尝试从字符串“filename_newpart_logic”
获取“逻辑”索引 使用的命令是expr index "$string1" "logic"
但结果是expr:语法错误
我在一些在线命令编辑器中尝试过相同的操作,但它完美无缺,但不在shell中。 ksh版本很老了。如果有任何其他语法/替代方法可以实现此目的,请告诉我。
答案 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中使用