![ksh93 是否支持 +o 类型选项及其内置的 getopts(1) ?](https://linux22.com/image/144253/ksh93%20%E6%98%AF%E5%90%A6%E6%94%AF%E6%8C%81%20%2Bo%20%E7%B1%BB%E5%9E%8B%E9%80%89%E9%A1%B9%E5%8F%8A%E5%85%B6%E5%86%85%E7%BD%AE%E7%9A%84%20getopts(1)%20%EF%BC%9F.png)
getopt(3)
ksh93 支持长选项,与 Sun Microsystems 在 2004 年春季为、Bourne Shell
和引入的方式相同ksh88
。
例如,您可以使用:
getopt(argc, argv, "V(version)");
--version
为短选项建立长别名-V
。
但是,ksh93
不使用getopt(3)
Solaris libc,而是使用自己的实现,该实现在内部用于支持以符号开头的短选项+
。
有没有办法通过ksh93
内置getopts(1)
实现和 iff 使用此功能,它是如何工作的?
答案1
这是我尝试过的 getopts 使用示例
#!/bin/ksh
#Default value
ONE=123
TWO=456
# getopts configuration
USAGE="[-author?Andre Gelinas <[email protected]>]"
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 可以接受任何内容。顺便说一句,您可能想看看https://docstore.mik.ua/orelly/unix3/korn/appb_11.htm还。