Mod(%) 不是标识符 Unix ksh

Mod(%) is not an identifier Unix ksh

我已经将一个函数从 C 语言转换为 Unix ksh 脚本,下面是代码

 function greg_julian
{
    typeset -i long_date=;
    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;
}

我收到如下错误。尝试删除 % 左右的 space。但同样的错误。我无法找出错误请帮助。

 greg_julian[87]: %: is not an identifier

在 shell 脚本中计算数学表达式的一种方法是使用 expr.

你能试试看并提出反馈吗?

您可以使用中间变量:

#!/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