2

我正在尝试检查字符串是否包含任何通配符。这是我失败的尝试:

#!/bin/bash
WILDCARDS='* . ? !  ] [' 
a="foo*bar"
for x in $REJECTED_WILDCARDS
do 
    if [[ "$a" == *"$x"* ]]
    then 
            echo "It's there!";
    fi 
done

有什么建议么?

4

2 回答 2

5

略短且没有循环:

if [ "$a" != "${a//[\[\]|.? +*]/}"  ] ; then
  echo "wildcard found"
fi

参数替换删除所有通配符。字符串不再相等。

于 2013-04-23T18:55:31.307 回答
4

将通配符设置为 bash 数组,如下所示

wildcards=( '*' '.' '?' '|' ']' '[' )

然后

a="foo*bar"
for wildcard in "${wildcards[@]}";
do
  if [[ $a == *"${wildcard}"* ]];
  then
    echo 'yes';
  fi;
 done
于 2013-04-23T15:56:17.557 回答