0

我正在使用 getopts 将选项传递给 ksh 脚本,但 getopts 无法识别这些选项。

这是我给 getopts 的使用字符串的选项部分

#OPTIONS
USAGE+="[w:week?print the whole week]"
USAGE+="[b:before?print the month up to and including the requested day]"
USAGE+="[a:after?print the month starting from the requested day to the end of the month or week]"
USAGE+="[d:day]#[day:=$(date "+%d"|sed 's/^0*//')?requested day]{[1-31]}"
USAGE+="[m:month]#[month:=$(date "+%m"|sed 's/^0*//')?month of requested day]{[1-12]}"
USAGE+="[y:year]#[year:=$(date "+%Y")?year of requested day.]"

这是我的 getopts 块

while getopts "$USAGE" optchar
do
    echo $optchar
    case $optchar
    in
            w)      boolWEEK=true;
                    ;;

            b)      boolBEFORE=true;
                    ;;
            a)      boolAFTER=true;
                    ;;
            d)      day=$OPTARG
                    ;;
            m)      month=$OPTARG
                    ;;
            y)      year=$OPTARG
                    ;;
            esac
done

这是使用选项运行脚本的输出

$ ksh now.ksh -a
now.ksh: -a: unknown option
?
Usage: now.ksh [-wba] [-d day] [-m month] [-y year]
$
4

1 回答 1

0

您似乎正在使用 ast getopts语法。

我通过添加[-]到 USAGE 字符串的前面得到了这个工作:

USAGE+="[-][w:week?print the whole week]"

也许[-]需要解决选项字符串中的任何歧义。

于 2013-09-28T22:39:39.690 回答