如何在 shell 脚本中将字符串与通配符字符串进行比较?

如何在 shell 脚本中将字符串与通配符字符串进行比较?

我想在kshshell 脚本中比较文件名字符串和文件掩码。您能纠正一下语法吗?

if [ "NPER20200422TEST.PTN" = "NPER*.PTN" ]
then
    echo "File matched"
else
    echo "File not matched"
fi

我想将我的文件字符串与给定的文件掩码相匹配。

答案1

确保您正在使用或者或者, 然后

if [[ "NPER20200422TEST.PTN" == NPER*.PTN ]]

使用双括号条件,并且特殊的通配符元字符必须不加引号。

答案2

在类似 Bourne 的 shell 中,包括ksh,这就是该case构造的用途:

case NPER20200422TEST.PTN in
  (NPER*.PTN) echo "File matched";;
  (*) echo "File not matched";;
esac

请注意,在 Bourne shell(一种历史 shell,如今已不再使用,尽管许多人一直sh对它感到困惑)中,您必须省略(s。在的 标准 (POSIX) 实现中允许使用或(*)*)sh

答案3

您可以使用 an 打印您的语句echo并将其通过管道传输到grep

if echo NPER20200422TEST.PTN | grep -q "NPER.*PTN"
then
  echo "File matched"
else
  echo "File not matched"
fi

grep -q不会产生输出

相关内容