因此,我有一个脚本,可以用来处理选项,getopts
但我也想以通常的方式读取程序本身的参数。因此,在此示例脚本中,我想处理选项,然后echo
处理参数,例如./script.sh -abc theargument
。出现的问题是我不知道它是哪个shell参数。参数不应该与选项相关,因此您也可以像这样调用脚本./script.sh theargument
:
#!/bin/sh
while getopts "abc" opt; do
case $opt in
a) echo "option a" ;;
b) echo "option b" ;;
c) echo "option c" ;;
esac
done
echo # what?
我不能只shift
带参数$OPTIND
,使其$1
因为选项可以给出像-abc
,-a -b -c
,-ab -c
等等,这样的期权数量不对应的参数的个数。
理想情况下,我想避免bashisms
该bash
方法是使用间接用${!VARIABLE}
-什么VARIABLE
扩展到被当作参数使用,所以echo "${!OPTIND}"
后while循环在你的例子显示theargument
。
更通用的方法是先shift
丢弃选项参数,然后再使用$1
etc。
if [ "$OPTIND" -gt 1 ]; then
shift $((OPTIND - 1))
fi
在您的示例$OPTIND
中,循环后为2,因此这会将位置参数向左移动1,丢弃-abc
并留theargument
在中$1
。如果使用-abc theargument
,,等等-ab -c theargument
,则此方法有效-a -b -c theargument
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句