我正在尝试使用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,我尝试自己调试:
在命令行上:
set -- --firstName sriram --lastName shankar
然后:
OPTS=$(getopt -l firstName:,lastName: -- "$@");
获得输出:
echo $?; echo "$OPTS"
0
'sriram' --lastName 'shankar' --
我的问题:
1.我怎样才能使上述内容正确?
2.我删除了可选参数(我不想这样做),但仍然出现错误。
答案 0 :(得分:0)
上述代码中存在两个问题:
getopt
的正确调用如下:OPTS = $(getopt -o'' - l“firstName:,lastName:,age ::” - “$ @”);
请注意''
标志旁边的-o
。 Getopt要求-o
标志留空,以防没有短格式参数。
=
符号指定此脚本的参数
脚本的示例调用将是:./longArgumentsParsing.bash --firstName=sriram --lastName=shankar --age=30
。