我使用getopts将bash脚本中的参数解析为
while getopts ":hd:" opt; do
case $opt in
d ) echo "directory = $OPTARG"; mydir="$OPTARG"; shift $((OPTIND-1)); OPTIND=1 ;;
h ) helptext
graceful_exit ;;
* ) usage
clean_up
exit 1
esac
done
exeparams="$*"
exeparams
将保留任何未解析的选项/参数。由于我想使用exeparams来保存要在脚本内执行的命令的选项(该选项可以与脚本自己的选项重叠),因此我想使用-结束传递给脚本的选项。如果我通过
myscript -d myscriptparam -- -d internalparam
exeparams
将举行
-- -d internalparam
我现在想删除--
将这些参数传递给内部命令的引线。有没有一种优雅的方法可以做到这一点,或者我可以--
从getopts中获得仅保留其余部分的字符串?
shift; OPTIND=1
内getopts
循环可能不是这样做的最佳方式。它仅在您的情况下有效,因为您只有2个选项,而在所有其他选项中,仅退出脚本。否则,您将需要shift; OPTIND=1
所有选项,这意味着代码重复(错误的做法)。只需shift $((OPTIND - 1))
在循环结束后立即执行-这是最传统的方法,也可能是最有效的方法。