我想在bash
脚本中同时支持短选项和长选项,这样就可以:
$ foo -ax --long-key val -b -y SOME FILE NAMES
这可行吗?
我想在bash
脚本中同时支持短选项和长选项,这样就可以:
$ foo -ax --long-key val -b -y SOME FILE NAMES
这可行吗?
getopt
支持长选项。
http://man7.org/linux/man-pages/man1/getopt.1.html
这里是使用你的参数的示例:
#!/bin/bash
OPTS=`getopt -o axby -l long-key: -- "$@"`
if [ $? != 0 ]
then
exit 1
fi
eval set -- "$OPTS"
while true ; do
case "$1" in
-a) echo "Got a"; shift;;
-b) echo "Got b"; shift;;
-x) echo "Got x"; shift;;
-y) echo "Got y"; shift;;
--long-key) echo "Got long-key, arg: $2"; shift 2;;
--) shift; break;;
esac
done
echo "Args:"
for arg
do
echo $arg
done
$ foo -ax --long-key val -b -y SOME FILE NAMES
的输出结果为:
Got a
Got x
Got long-key, arg: val
Got b
Got y
Args:
SOME
FILE
NAMES
getopt
存在参数中某些字符和非选项参数的问题。如果 getopt --test; echo $?
输出 "4",则说明没有问题。如果输出 "0",则说明该版本存在此问题。有关更多信息,请参见 man getopt
。 - Dennis Williamson
getopts
,但有几个答案提出了不同的方法。我同意关闭该问题。 - tripleee