2013-10-02 44 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