为什么用getopt无法赋值?

问题描述 投票:0回答:1

这是我的

test.sh

#!/usr/bin/env bash
arg="default"
TEMP=$(getopt --long been: -n 'test.sh' -- "$@")
eval set -- "$TEMP"
while true ; do
    case "$1" in
        --been)
            echo 'in been option'
            arg="$2"
            shift;;
        --)
            echo 'in the end' 
            shift ; break ;;
    esac
done
echo "$arg"

arg
赋值:

bash  ./test.sh  --been=xxyyzz
in the end
default

为什么取不到结果>?

bash  ./test.sh  --been=xxxx
in been option
xxxx
bash getopt
1个回答
0
投票

getopt(1)
手册页提到,在BUGS部分,

如果您根本不需要任何短选项变量,则语法不是很直观(您必须将它们显式设置为空字符串)。

所以你需要

getopt --long been: -n test.sh "" "$@"

(如果您想在

--
参数中包含
getopt
,它需要位于 之前 空参数)

有了这个改变,

in been option
xxyyzz

(您还需要在

break
--been
部分添加
case
,并使用
shift 2
来消除争论)

© www.soinside.com 2019 - 2024. All rights reserved.