unix 使用--getopts获取全字标记

pokxtpni  于 2023-03-12  发布在  Unix
关注(0)|答案(3)|浏览(153)

getopts可以用来拾取全字标志吗?
事情如下:

while getopts ":abc --word" opt; do
    case ${opt} in
        a) SOMETHING
            ;;
        ...
        --word) echo "Do something else."
            ;;
    esac
done

想捡那些双破折号旗。

k4emjkb1

k4emjkb11#

基本上方舟的答案,但更容易和更快地阅读比mywiki页面:

#!/bin/bash
# example_args.sh

while [ $# -gt 0 ] ; do
  case $1 in
    -s | --state) S="$2" ;;
    -u | --user) U="$2" ;;
    -a | --aarg) A="$2" ;;
    -b | --barg) B="$2" ;;

  esac
  shift
done

echo $S $U, $A $B

$#表示参数的数目,-gt是“大于”,$1是本例中的标志,$2是标志的值。
./example_args.sh --state IAM --user Yeezy -a Do --barg it的结果为:

IAM Yeezy, Do it
atmip9wb

atmip9wb3#

找到了一种方法:

while getopts ":abc-:" opt; do
    case ${opt} in
        a) echo "Do something"
            ;;
        ...
        -)
            case ${OPTARG} in
                "word"*) echo "This works"
                    ;;
            esac
    esac
done

加入─ ─到opstring并使用$OPTARG添加一个子case,你可以选择你想要的long选项。如果你想为该选项添加一个参数,你可以添加 * 或=* 到case并选择参数。

相关问题