【问题标题】:Bad substitution error in ksh [duplicate]ksh中的错误替换错误[重复]
【发布时间】:2014-01-07 02:30:43
【问题描述】:

以下 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

谁能告诉我我做错了什么?

【问题讨论】:

    标签: shell unix scripting ksh substitution


    【解决方案1】:

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

    【讨论】:

    • 请解释如何使用awk。这就是我提到我正在使用 ksh 88 的全部意义
    • 您可以使用:echo ${strtochk} | cut -c${i}-2 代替 ksh88。
    【解决方案2】:

    您可以用这条便携式线路替换您的测试:

    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))
    

    【讨论】:

      【解决方案3】:

      这个用于检查输入字符串是否为回文的 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}"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-26
        • 2014-04-05
        • 2011-11-01
        • 1970-01-01
        • 2012-10-09
        • 1970-01-01
        相关资源
        最近更新 更多