ksh中的替换错误

时间:2014-01-07 02:30:43

标签: shell unix scripting ksh substitution

以下KornShell(ksh)脚本应检查该字符串是否为回文结构。我使用的是ksh88,而不是ksh93

#!/bin/ksh
strtochk="naman"
ispalindrome="true"
len=${#strtochk}
i=0
j=$((${#strtochk} - 1))
halflen=$len/2
print $halflen
while ((i < $halflen))
do
 if [[ ${strtochk:i:1} == ${strtochk:j:1} ]];then
       (i++)
       (j--)
 else
  ispalindrome="false"
  break
 fi
done

print  ispalindrome

但是我在以下行遇到了错误的替换错误:if [[ ${strtochk:i:1} == ${strtochk:j:1} ]];then

有人可以让我知道我做错了吗?

3 个答案:

答案 0 :(得分:2)

${strtochk:i:1}${strtochk:j:1}中的子字符串语法在ksh88中不可用。升级到ksh93,或使用其他语言,如awk或bash。

答案 1 :(得分:1)

您可以使用此便携式产品线替换您的测试:

if [ "$(printf "%s" "$strtochk" | cut -c $i)" =
     "$(printf "%s" "$strtochk" | cut -c $j)" ]; then

您还需要替换可疑的

halflen=$len/2

halflen=$((len/2))

和ksh93 / bash语法:

$((i++))
$((j--))

用这个ksh88:

i=$((i+1))
j=$((j-1))

答案 2 :(得分:0)

这个用于检查输入字符串是否为回文的KornShell(ksh)脚本怎么样。

<强> isPalindrome.ksh

#!/bin/ksh 

#-----------
#---Main----
#-----------
echo "Starting: ${PWD}/${0} with Input Parameters: {1: ${1} {2: ${2} {3: ${3}"
echo Enter the string
read s
echo $s > temp
rvs="$(rev temp)"
if [ $s = $rvs ]; then
    echo "$s is a palindrome"
else
    echo "$s is not a palindrome"
fi  
echo "Exiting: ${PWD}/${0}"