string - 检查一个字符串是否包含在shell中的其他字符串中
问题描述
如果我运行它,它不会打印是。
if [s == [Ss]]
then echo "yes"
fi
但是,如果我写 double []
,就会像
if [[s == [Ss]]]
then echo "yes"
fi
它打印的是
我想知道为什么
解决方案
继续我的评论,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
(注意:正则表达式必须匹配被测试字符串的全部内容)
推荐阅读
- javascript - Javascript 导入。“@”的含义是什么?
- libsodium - libsodium 中的基本群算术
- c++ - 得到错误:即使在实现所有虚拟方法之后,对“vtable for REDirect”的未定义引用
- html - Bootstrap 4 粘页脚问题
- ms-access - 在 MS Access 中按触发器删除记录
- python - 如何在 python 中从我的 JSON 文件中获取一个值
- javascript - 如何在我的简单 Javascript 游戏中改进碰撞检测
- citrus-framework - Citrus 框架 - 回声动作不会“回声”
- javascript - 如何使用嵌套游标从 IndexedDB 读取数据?
- ruby-on-rails - 设计:移除扩展模型的模块