gpt4 book ai didi

bash - 使用 getopt 解析长参数会跳到第一个值

转载 作者:行者123 更新时间:2023-12-05 07:49:56 25 4
gpt4 key购买 nike

我正在尝试使用 getopt 来解析长参数(其中一些是强制性的,另一些则不是)。代码:

#!/bin/bash

# firstName is compulsory, age is not and lastName is again compulsory.

OPTS=`getopt --long firstName:,age::,lastName: -n 'longArgumentsParsing' -- "$@"`

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

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

while true; do
echo "Argument seen: $1";
echo "And value seen: $2";
case "$1" in

--firstName ) echo "First name: $2"; shift 2;
;;

--lastName )
echo "Last Name: $2";
shift 2;
;;

--age ) if [ -z "$2" ];
then
echo "Age is not specified.";
else
echo "Age specifed: $2"; shift 2;
fi
;;

-- ) shift; break ;;

* ) break ;;
esac
done

每次我使用 ./longArgumentsParsing --firstName sriram --age 30 运行它时,程序都会退出并显示以下输出:

Argument seen: sriram
And value seen: --lastName

程序显然无法正确解析输入键和参数值对。为什么?我哪里错了?

更新:

根据 this answer ,我试着自己调试:在命令行上:
设置 -- --firstName sriram --lastName shankar然后:
OPTS=$(getopt -l firstName:,lastName: -- "$@");
获取输出:
echo $?; echo "$OPTS"
0
'sriram' --lastName 'shankar' --

我的问题:
1. 如何让上面的内容正确?
2. 我已经删除了可选参数(我不想这样做),但仍然出现错误。

最佳答案

上面的代码有两个问题:

  1. 脚本只解析长参数。如果仅使用长参数,getopt 的正确调用如下:

OPTS=$(getopt -o '' -l "firstName:,lastName:,age::" -- "$@");

注意 -o 标志旁边的 ''。 Getopt 要求 -o 标志留空,以防没有短格式参数。

  1. 此脚本的参数需要用 = 符号指定。
    脚本的示例调用是:
    ./longArgumentsParsing.bash --firstName=sriram --lastName=shankar --age=30.

关于bash - 使用 getopt 解析长参数会跳到第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36742191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com