检查一个字符串是否不止一次有一个字符

use*_*266 5 shell bash text-processing

我想检查一个字符串是否不止一次包含一个字母(不是一个特定的字母,实际上是任何字母)。

例如:

用户:

test.sh this list
Run Code Online (Sandbox Code Playgroud)

脚本:

if [ "$1" has some letter more then once ]
then 
do something
fi
Run Code Online (Sandbox Code Playgroud)

and*_*coz 5

您可以使用grep.

正则表达式\(.\).*\1匹配任何单个字符,后跟任何字符,后跟相同的第一个字符。

grep 如果至少一行与正则表达式匹配,则返回成功。

if echo "$1" | grep -q '\(.\).*\1' ; then  
  echo "match" ; 
fi
Run Code Online (Sandbox Code Playgroud)

请注意,\(.\)匹配任何字符而不是任何字母,也许您必须将正则表达式限制为您对“真正任何字母”的特定定义。您可以使用诸如\([[:alnum:]]\).*\1,\([[:alpha:]]\).*\1或 之类的东西\([a-df-z1245]\).*\1