首页 > 解决方案 > 检查一个字符串是否包含在shell中的其他字符串中

问题描述

如果我运行它,它不会打印是。

if [s == [Ss]]
then echo "yes"
fi

但是,如果我写 double [],就会像

if [[s == [Ss]]]
then echo "yes"
fi

它打印的是

我想知道为什么

标签: stringshellif-statementshcontains

解决方案


继续我的评论,POSIX-shell 不允许在(与 同义)中使用字符类(例如)。只有 bash允许其中包含字符类。[...]test[...][[ ... ]]

如果您已经coreutils安装(几乎每个发行版都安装了),您仍然可以将字符列表与返回字符列表中第一个字符的字符串中的索引(基于 1)的字符串进行匹配。对于您的情况,您可以使用:

if [ $(expr index "s" "sS") -gt '0' ]; then
    echo yes; 
fi

Whereexpr index "s" "sS"是 的通常形式index string charlist,需要expr在它之前使用 。

如果您仅限于 POSIX shell,那么您还可以使用expr string : regex正则表达式进行匹配。

if [ $(expr "s" : '[sS]$') -gt '0' ]; then
    echo yes; 
fi

注意:正则表达式必须匹配被测试字符串的全部内容)


推荐阅读