首页 > 解决方案 > getopts 没有正确解析 args

问题描述

这是我的简短脚本:

#!/bin/bash
user=""
secret=""
pkgname=""

while getopts ":p:s:u:" opt; do
  case ${opt} in
        p )
        pkgname=$OPTARG
        echo "p=$pkgname"
     ;;
      s )
      secret=$OPTARG
        echo "s=$secret"
      ;;
   u )
      user=$OPTARG
        echo "u=$user"
      ;;
   \? )
        usage
        exit 1
      ;;
    :)
    echo "Option -$OPTARG requires an argument."
    usage
    exit 1
  esac
done

当我使用以下命令运行它时:

./script.sh -u 'uuuu' -s 'aaaa' -p pkg.rpm

输出:

u=uuuu
s=aaaa -p

虽然我希望它是

u=uuuu
s=aaaa
p=pkg.rpm

我也尝试通过更改序列来进行参数的多种组合,但无法解决。为什么's'的值不正确?

标签: bashgetoptgetopts

解决方案


推荐阅读