我正在尝试处理bash脚本的可选参数和必需参数。我有以下脚本:
while getopts "a:x:" opt; do
case $opt in
a) echo "option a set: $OPTARG" ;;
x) echo "option x set: $OPTARG" ;;
\?) echo "Invalid option: -$OPTARG" >&2; exit 1;;
esac
done
shift $((OPTIND-1))
echo "mandatory argument $1"
echo "mandatory argument2 $2"
当我使用以下命令运行脚本时,一切看起来都正常:
./script.sh -a optionA -x optionX mandatory1 mandatory2
但是,当我混合使用这些参数时:
./script.sh mandatory1 mandatory2 -a optionA -x optionX
它不是...如何使它适用于所有参数组合?
我认为,您可以在两种说法之间进行迭代。
我认为这可以满足您的要求,并允许您使用它--
来防止将以下参数解释为选项。
mandatory=()
while [ $# -gt 0 ] && [ "$1" != "--" ]; do
while getopts "a:x:" opt; do
case $opt in
a) echo "option a set: $OPTARG" ;;
x) echo "option x set: $OPTARG" ;;
\?) echo "Invalid option: -$OPTARG" >&2; exit 1;;
esac
done
shift $((OPTIND-1))
while [ $# -gt 0 ] && ! [[ "$1" =~ ^- ]]; do
mandatory=("${mandatory[@]}" "$1")
shift
done
done
if [ "$1" == "--" ]; then
shift
mandatory=("${mandatory[@]}" "$@")
fi
echo "mandatory argument ${mandatory[0]}"
echo "mandatory argument2 ${mandatory[1]}"
基本上,这个想法是使用getopt使用所有选项,然后手动使用所有非选项,然后再次使用getopt寻找更多选项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句