我正在查看是否有一种方法可以getopts
使用字符串而不是字符来处理开关。
例如,我想提供这样的东西:
script.ksh -file1 file1.txt -file2.txt
代替:
script.ksh -f file1.txt -g file2.txt
这对 unix 可行getopts
吗?
不,这是不可能的getopts
。您必须自己进行解析,例如使用case
开关:
while (($# > 0))
do
case "$1" in
-file1)
shift
file1=$1;;
-file2)
shift
file2=$1;;
esac
shift
done
外部getopt
(注意没有“s”)可以处理长选项,但它有其自身的缺点。
来自BashFAQ/035:
永远不要使用 getopt(1)。getopt 无法处理空参数字符串或带有嵌入空格的参数。请忘记它曾经存在过。