bash - 根据多个值检查 bash 变量

标签 bash shell variables scripting

我想检查我的 Bash 脚本中的输入参数。可以有很多组合,所以我决定使用这样的构造:

if  ( [[ "$2" = "(PARAM1|PARAM2|PARAM3)" && "$3" = "(PARAM11|PARAM22|PARAM33)" ]] )

我预计这一行将检查指定了哪个参数(可以有输入组合,如 PARAM1 PARAM22PARAM11 PARAM3 等)。

但它不起作用。我应该使用数组还是只需要尝试其他语法?

最佳答案

您可能需要重新阅读 bash 手册页中关于“复合命令”和“条件表达式”的部分(每个手册页都有上限)。您的问题将条件放在子 shell 中,这是不必要的。

如果您想将参数($2$3 等)与正则表达式进行匹配,您可以使用如下格式:

if [[ $2 =~ ^(foo|bar)$ ]]; then
   ...
fi

或者:

if [[ $2 =~ ^(foo|bar)$ ]] && [[ $3 =~ ^(baz|flarn)$ ]]; then
   ...
fi

也就是说,这里并不真正需要正则表达式。正则表达式比简单的模式匹配使用更多的 CPU。我可能会使用 case 语句来处理这个问题:

case "$2" in
  foo|bar)
    case "$3" in
      glurb|splat)
      # do something
      ;;
    esac
    ;;
  baz)
    # do something else
    ;;
esac

您处理参数的确切方式取决于您实际需要对它们做什么,您没有在问题中分享。如果您更新问题以包含更多详细信息,我很乐意更新此答案。 :)

关于bash - 根据多个值检查 bash 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29102229/

相关文章:

linux - 以编程方式报告 Linux 中是否启用了 ACL 支持

variables - 将 OGNL 表达式应用于上下文变量

linux - 我可以从 python 运行交互式 bash 脚本吗?

linux - 如何删除 linux 行尾,但在 bash 中保留 windows 行尾?

bash - 将文本附加到变量的末尾

shell - 在 ZSH 中使用陷阱退出 shell 脚本的正确方法?

JavaScript 控制台没有正确的值

php - PHP 中的自定义环境变量

bash - 加载.env的Dockerfile入口点bash文件在容器中不可见

linux - Bash printf %q 指令无效