向 getopts 发送一个 hyphened/double-hyphened 参数
send an hyphened/double-hyphened argument to getopts
我正在使用 getopts 在 shell 脚本中获取可选参数,然后将它们用于 运行 另一个脚本。
我想发送给另一个程序的参数之一是可选参数(例如 --conf)。
但是当我将它发送到 getopts 时,我收到了这些错误消息:
service_wrapper.sh: illegal option -- -
service_wrapper.sh: illegal option -- c
service_wrapper.sh: illegal option -- o
service_wrapper.sh: illegal option -- n
service_wrapper.sh: illegal option -- f
有什么方法可以将此参数发送给 getopts?
这是解析选项的代码:
while getopts 'p:o' OPTION
do
case ${OPTION} in
o) CONF=$OPTARG;;
p) PLATFORM=$OPTARG;;
esac
done
这是我正在尝试的行的示例 运行:
./service_wrapper.sh config -p platform -o '--full-config-data {"json_key1":"json_val1","json_key2":"json_val2"}'
编辑:
按照评论中的建议,我打印了 bash 版本和参数,这是输出:
############################
BASH:4.2.46(2)-release
arg: config
arg: -p
arg: platform
arg: -o
arg: --full-config-data {"json_key1":"json_val1","json_key2":"json_val2"}
############################
知道了!
按照@user1934428 的建议打印参数后,
我发现最后一个参数可用于脚本但不可用于 getopts。
我试图理解为什么,它击中了我,在 'o'!
之后缺少一个冒号
而不是while getopts 'p:o' OPTION
应该是 while getopts 'p:o:' OPTION
如 getopts man page 中所述:
if a letter is followed by a colon, the option is expected to have an argument, or group of arguments, which must be separated from it by white space.
注意: 根据上面的信息,我解决了这个问题,getopts 得到了最后一个参数,虽然它用空格解析了它,即使它被引用了。
这是因为当我应该像这样 main "$@"
.
引用它时,我像这样 main $@
向主函数发送了参数
我正在使用 getopts 在 shell 脚本中获取可选参数,然后将它们用于 运行 另一个脚本。 我想发送给另一个程序的参数之一是可选参数(例如 --conf)。
但是当我将它发送到 getopts 时,我收到了这些错误消息:
service_wrapper.sh: illegal option -- -
service_wrapper.sh: illegal option -- c
service_wrapper.sh: illegal option -- o
service_wrapper.sh: illegal option -- n
service_wrapper.sh: illegal option -- f
有什么方法可以将此参数发送给 getopts?
这是解析选项的代码:
while getopts 'p:o' OPTION
do
case ${OPTION} in
o) CONF=$OPTARG;;
p) PLATFORM=$OPTARG;;
esac
done
这是我正在尝试的行的示例 运行:
./service_wrapper.sh config -p platform -o '--full-config-data {"json_key1":"json_val1","json_key2":"json_val2"}'
编辑:
按照评论中的建议,我打印了 bash 版本和参数,这是输出:
############################
BASH:4.2.46(2)-release
arg: config
arg: -p
arg: platform
arg: -o
arg: --full-config-data {"json_key1":"json_val1","json_key2":"json_val2"}
############################
知道了! 按照@user1934428 的建议打印参数后, 我发现最后一个参数可用于脚本但不可用于 getopts。
我试图理解为什么,它击中了我,在 'o'!
之后缺少一个冒号而不是while getopts 'p:o' OPTION
应该是 while getopts 'p:o:' OPTION
如 getopts man page 中所述:
if a letter is followed by a colon, the option is expected to have an argument, or group of arguments, which must be separated from it by white space.
注意: 根据上面的信息,我解决了这个问题,getopts 得到了最后一个参数,虽然它用空格解析了它,即使它被引用了。
这是因为当我应该像这样 main "$@"
.
main $@
向主函数发送了参数