Синтаксис оболочки очень чувствительны пробельные:
[[
является acually название команды, это не только синтаксис, поэтому должен быть пробел после него.
- Последний аргумент
[[
должен быть ]]
, поэтому ему должно предшествовать пробел.
[[
работает по-разному в зависимости от количества аргументов, которые он получает, так что вы хотите иметь пробелы вокруг ==
- В присваивание переменной, вы не должны иметь пробелы вокруг
=
.
Советы:
- как только Вы выясняете это не палиндром,
break
из цикла в то время как
- вы, вероятно, проверяя характер по характеру, так что вы хотите
${strtochk:i:1}
i++
и j--
это арифметические выражения, а не команды, поэтому вам нужны двойные скобки.
- Вы начинаете с
i=0
и j=$((${#strtochk} - 1))
?
while ((i < halflen))
do
if [[ ${strtochk:i:1} == ${strtochk:j:1} ]];then
((i++))
((j--))
else
ispalindrome=false
break
fi
done
Проверьте, если ваша система имеет rev
, то вы можете просто сделать:
if [[ $strtochk == $(rev <<< "$strtochk") ]]; then
echo "'$strtochk' is a palindrome"
fi
function is_palindrome {
typeset strtochk=$1
typeset -i i=1 j=${#strtochk}
typeset -i half=$((j%2 == 1 ? j/2+1 : j/2))
typeset left right
for ((; i <= half; i++, j--)); do
left=$(expr substr "$strtochk" $i 1)
right=$(expr substr "$strtochk" $j 1)
[[ $left == $right ]] || return 1
done
return 0
}
if is_palindrome "abc d cba"; then
echo is a palindrome
fi
Не знаете 'strtochk', любое определение? –
Какая ошибка плохой замены? – javaPlease42
Примечание: вопрос [Плохая ошибка замещения в 'ksh'] (http: // stackoverflow.com/questions/20962928/bad-substitution-error-in-ksh) является дубликатом этого, и в комментариях упоминалось использование 'ksh88' вместо' ksh93'. –