Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash getopts,为什么我的脚本没有解析额外的输入参数?_Bash_Shell_Input_Getopts - Fatal编程技术网

bash getopts,为什么我的脚本没有解析额外的输入参数?

bash getopts,为什么我的脚本没有解析额外的输入参数?,bash,shell,input,getopts,Bash,Shell,Input,Getopts,我试图创建一个bash脚本,它读取一组可选的输入解析参数。我试着跟着 我试图添加另一个整数参数来读取,我称之为x(或xxx size)。我认为在while循环中复制stack size行命令就足够了,但事实并非如此 当我运行脚本时,系统将x参数作为顺序中的最后一个参数,而不读取它。我不明白发生了什么事 这是我的密码: #!/bin/bash # # Example of how to parse short/long options with 'getopt' # OPTS=`getopt -

我试图创建一个bash脚本,它读取一组可选的输入解析参数。我试着跟着

我试图添加另一个整数参数来读取,我称之为
x
(或
xxx size
)。我认为在
while
循环中复制
stack size
行命令就足够了,但事实并非如此

当我运行脚本时,系统将
x
参数作为顺序中的最后一个参数,而不读取它。我不明白发生了什么事

这是我的密码:

#!/bin/bash
#
# Example of how to parse short/long options with 'getopt'
#

OPTS=`getopt -o vhnxs: --long verbose,dry-run,help,xxx-size,stack-size: -n 'parse-options' -- "$@"`

if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; exit 1 ; fi

echo "$OPTS"
eval set -- "$OPTS"

VERBOSE=false
HELP=false
DRY_RUN=false
STACK_SIZE=0
XXX=-1

printf "\n1st parameter: "$1"\n"
printf "2nd parameter: "$2"\n"
printf "3rd parameter: "$3"\n"
printf "4th parameter: "$4"\n"
printf "5th parameter: "$5"\n\n"

while true; do
  case "$1" in
    -v | --verbose ) VERBOSE=true; shift ;;
    -h | --help )    HELP=true; shift ;;
    -n | --dry-run ) DRY_RUN=true; shift ;;
    -x | --xxx-size ) XXX="$2"; shift; shift ;;
    -s | --stack-size ) STACK_SIZE="$2"; shift; shift ;;
    -- ) shift; break ;;
    * ) break ;;
  esac
done

echo VERBOSE=$VERBOSE
echo HELP=$HELP
echo DRY_RUN=$DRY_RUN
printf "STACK_SIZE "$STACK_SIZE"\n"
printf "XXX "$XXX"\n"
printf "\n\n"
如果我尝试将
s
参数设置为100,将
x
参数设置为65,则会发生以下情况:
$。/script.sh-s100-x65

标准输出:

 -s '100' -x -- '65'

1st parameter: -s
2nd parameter: 100
3rd parameter: -x
4th parameter: --
5th parameter: 65

VERBOSE=false
HELP=false
DRY_RUN=false
STACK_SIZE 100
XXX --
正如您所看到的,程序没有像我所希望的那样将值65与XXX相关联。我怎样才能解决这个问题


谢谢

您通过了
-s'100'-x--'65'
,而不是
-s'100'-x'65'
。因为
-->
是第四个参数(以及-x之后的参数),它将
-->
分配给
XXX
。然后,它读取65作为下一个参数,不知道如何处理它,从而破坏case语句并输出变量。@LukasIsselbächer我没有将
--
作为输入参数传递。我不知道剧本为什么这么想@Davicechico.it请删除
评估集--“$OPTS”
然后它就会工作:)@LukasIsselbächer谢谢!如果你有时间把它重新写下来作为一个正确的答案,我可以把它标记为“接受答案”。