我正在尝试处理我的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
它没有...如何让它适用于所有参数组合?
答案 0 :(得分:3)
我认为你可以在两种论点之间进行迭代。
我认为这样做符合您的要求,并允许您使用--
来防止以下参数被解释为选项。
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查找更多选项。
答案 1 :(得分:-2)
为了使它工作,我必须在public List<Algo> AlgoList = new List<Algo>
{
new BastionAlgo(),
new BitcoreAlgo(),
new Blake2SAlgo(),
new BlakeAlgo(),
new BlakeCoinAlgo(),
new BmwAlgo(),
new C11FlaxAlgo(),
new CryptolightAlgo(),
new CryptonightAlgo(),
...
};
:
shift $((OPTIND-1))