首页 > 解决方案 > 名称检查匹配模式

问题描述

我需要帮助了解为什么代码 B 会产生不同的结果

x=TEST_DATA_12345678_TST_87456321

下面的代码(CODE A)产生正确的输出(匹配)

if [[ $x == TEST_[A-Z][A-Z][A-Z][A-Z]_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_[A-Z][A-Z][A-Z]_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] ]]; then echo "match"; else echo "non match"; fi

但是,以下(代码 B)产生错误的输出(不匹配)

if [[ $x == TEST_[A-Z]{4}_[0-9]{8}_[A-Z]{3}_[0-9]{8} ]]; then echo "match"; else echo "non match"; fi

标签: linuxbashunix

解决方案


要检查if 语句中的正则表达式,您需要使用=~off ==

#!/bin/bash

x=TEST_DATA_12345678_TST_87456321
if [[ $x =~ TEST_[A-Z][A-Z][A-Z][A-Z]_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_[A-Z][A-Z][A-Z]_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] ]]; then echo "match"; else echo "non match"; fi
if [[ $x =~ TEST_[A-Z]{4}_[0-9]{8}_[A-Z]{3}_[0-9]{8} ]]; then echo "match"; else echo "non match"; fi

两者都将按预期匹配。

在线尝试!


推荐阅读