我正在尝试解析ksh中的参数。我不能使用 getopt 来实现与短选项相同的功能,我有两个/三个字符。目前,我正在使用 for 循环。它很愚蠢,但无法找到更好的东西。
问题:如何将option + value设置为一个单位以进行解析? 另外,如果 eval set-$ option 对我有帮助,那我该如何使用呢? option 上的echo末尾未显示预期的“-”。我是在假设有什么问题吗?
我正在考虑使用一个变量来跟踪何时找到一个选项,但是这种方法似乎过于混乱和不必要。
感谢您的时间和帮助。
更新1: 如指出的那样添加代码。感谢markp,Andre Gelinas和随机选民,使这个问题变得更好。尝试执行代码第2行和第3行中给出的脚本-或传递的长短选项的任何其他组合。
ZonedDateTime
直到现在尝试使用TODO下面的代码:
#!/bin/ksh
# bash script1.sh --one 123 --two 234 --three "some string"
# bash script1.sh -o 123 -t 234 -th "some string"
# the following creates problems for short options.
#options=$(getopt -o o:t:th: -l one:two:three: "--" "$@")
#Since the below `eval set -- "$options"` did not append "--" at the end
#eval set -- "$options"
for i in $@; do
options="$options $i"
done
options="$options --"
# TODO capture args into variables
将使用以下命令捕获args:
for i in $options; do
echo $i
done
答案 0 :(得分:1)
尝试这样的事情:
#!/bin/ksh
#Default value
ONE=123
TWO=456
# getopts configuration
USAGE="[-author?Andre Gelinas <andre.gelinas@foo.bar>]"
USAGE+="[-copyright?2018]"
USAGE+="[+NAME?TestGetOpts.sh]"
USAGE+="[+DESCRIPTION?Try out for GetOps]"
USAGE+="[o:one]#[one:=$ONE?First.]"
USAGE+="[s:second]#[second:=$TWO?Second.]"
USAGE+="[t:three]:[three?Third.]"
USAGE+=$'[+SEE ALSO?\aman\a(1), \aGetOpts\a(1)]'
while getopts "$USAGE" optchar ; do
case $optchar in
o) ONE=$OPTARG ;;
s) TWO=$OPTARG ;;
t) THREE=$OPTARG ;;
esac
done
print "ONE = "$ONE
print "TWO = "$TWO
print "THREE = "$THREE
您可以使用--one或-o。使用--man或--help也可以。而且-o和-s仅是数字,但是-t将采取任何措施。希望有帮助。