首页 > 解决方案 > 如何在 bash 中缩短长的多重检查变量?

问题描述

我想检查 bash 中的多个变量但结果太多了,有什么办法可以缩短这个

我最终是这样的

if [[ $1 == -a || $2 == -a || $3 = -a ]] && [[ $1 == -b || $2 == -b || $3 = -b ]] && [[ $1 == -c || $2 == -c || $3 = -c ]] && [ $# -eq 4 ]; then
echo "insert some words"
exit
fi

我试过这个来缩短它,但不会工作

a=-a
b=-b
c=-c
if [[ ${@:1:3} == $a || ${@:1:3} == $b || ${@:1:3} == $c ]] && [ $# -eq 4 ]; then
echo "insert some words"
exit
fi

有没有办法缩短这个?提前致谢!

标签: bash

解决方案


选项getopts

while getopts ":a:b:c:" opt; do
    case $opt in
        (a) a=$OPTARG;;
        (b) b=$OPTARG;;
        (c) c=$OPTARG;;
    esac
done

echo $a $b $c

或者只是case

while [[ $@ ]]; do
    case $1 in
        (-a) a=$2;;
        (-b) b=$2;;
        (-c) c=$2;;
    esac; shift
done

echo $a $b $c

推荐阅读