【问题标题】:How can i shorten long multiple checking variable in bash? [duplicate]如何在 bash 中缩短长的多重检查变量? [复制]
【发布时间】:2020-12-30 00:52:35
【问题描述】:

我想在 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

有什么办法可以缩短这个吗? 提前致谢!

【问题讨论】:

  • 你可以使用getopts为你做参数解析。
  • -a,-b.-c 选项是取值还是标志?展示你如何调用程序。
  • 这也是BashFAQ #35的话题。
  • @glennjackman 选项应该采用多个值来执行代码,如果它只有 1 个值,那么它会退出。
  • @BenjaminW。谢谢!我会试试这个

标签: bash


【解决方案1】:

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

【讨论】:

  • optstring 中c 后面需要一个冒号
  • 我们的知识库中已经有其他示例涵盖了这一领域,并且做得更彻底。在How to Answer 中,请参阅回答正确提出的问题 部分,以及其中有关“之前已被多次询问和回答”的问题的要点。
  • @ivan 非常感谢你。我会尽力解决我的问题
猜你喜欢
  • 2019-01-17
  • 1970-01-01
  • 2017-03-31
  • 2020-10-21
  • 2013-05-25
  • 2018-12-09
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
相关资源
最近更新 更多