以下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
有人可以让我知道我做错了吗?
答案 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}"