2016-01-21 1 views
0

Я преобразовал одну функцию из C языка на Unix КШ сценария и ниже приведен кодMod (%) не является идентификатором Unix КШ

function greg_julian 
{ 
    typeset -i long_date=$1; 
    print "$scriptname ld $long_date" 1>&2; # Prints 20160121 
    set days -9999 0 31 59 90 120 151 181 212 243 273 304 334; 

    if [[ $long_date < 101 ]] then 
     return 0; 
    fi 

    typeset -i yy=$long_date/10000; 
    typeset -i mm=$long_date/100 % 100; 

    ymod=$(($yy % 4)) 
    if [[ $ymod -eq 0 && $mm -gt 2 && $yy -ne 0 ]] then 
     dm=1; 
    else 
     dm=0; 
    fi 
    echo $yy*1000 + ${days[$mm]} + $long_date % 100 + $dm; 
} 

я получаю ошибку, как показано ниже. Пробовал удаление пространства около%. но та же ошибка. Я не могу разобраться в ошибке, пожалуйста, помогите.

greg_julian[87]: %: is not an identifier 
+0

Вы также можете использовать что-то вроде 'пусть результат = 16% 5' вычислить по модулю в KSH. – mnille

ответ

0

Вы можете использовать промежуточную переменную:

#!/bin/ksh 

long_date=20160121 
typeset -i yy=$long_date/10000; 
typeset -i yymm=$long_date/100; 
typeset -i mm=$yymm%100; 
printf "%04d\n" $yy 
printf "%02d\n" $mm 
+0

отлично работает! Благодарю. пришлось удалить пространство вокруг% – xGen

0

Один из способов вычисления математических выражений в сценарии оболочки - использовать expr.

Вы возможно, попробуете и сделайте обратную связь, пожалуйста?

 Смежные вопросы

  • Нет связанных вопросов^_^