Bash getopts具有非字母选项

时间:2015-03-17 18:04:18

标签: bash getopts

我正在尝试使用getopts来解析bash版本4.2.45中的一些命令行参数。不幸的是,当我用-r1 apple -r2 banana -n hello -k 56运行这个脚本时,我没有获得r1或r2的任何输出。 e.g。

./script.sh -r1 apple -r2 banana -n hello -k 56
hello 56

下面是script.sh

read1=
read2=
name=
ks=
outdir=
threads=
while getopts "r1:r2:n:k:o:t" OPTION
do
    case $OPTION in
        r1) read1="$OPTARG" ;;
        r2) read2="$OPTARG" ;;
        n) name="$OPTARG" ;;
        k) ks="$OPTARG" ;;
        o) outdir="$OPTARG" ;;
        t) threads="$OPTARG" ;;
    esac
done

echo $read1 $read2 $name $ks

当我改变r1-> r和r2-> x时,我看到:

apple banana hello 56

正如我所料。数字真的不允许作为选项,还是我还缺少其他的东西?

1 个答案:

答案 0 :(得分:2)

单个-的短选项只能是一个字符。 r1:创建了一个-r选项和一个带有参数的-1选项。

如果您需要长选项,请从getopts切换到getopt并使用-l选项,这样您就可以使用带有两个短划线的--long个参数。

./script.sh --r1 apple --r2 banana -n hello -k 56