bash - 如何在 bash 中插入动态匹配模式?
问题描述
我正在查看此链接检查 Bash 数组是否包含一个值,该值说明如何检查列表中是否存在项目,如下所示:
if printf '%s\n' ${myarray[@]} | grep -q -P '^mypattern$'; then
# ...
fi
但是,我希望mypattern
将值作为变量传递,如下所示:
mynewpattern="xyz"
然后我期待以下工作
if printf '%s\n' ${myarray[@]} | grep -q -P '^"$mynewpattern"$'; then
# ...
fi
但它并没有选择新的模式xyz
。插入新模式的适当语法是什么?
我刚开始学习bash。
解决方案
单引号是错误的;你想要双引号而不是单引号。
但是,grep -P
这里也略有错误;它不能正确移植,并且您的模式不使用任何-P
启用的语法;另外,您应该正确引用您的数组。
if printf '%s\n' "${myarray[@]}" |
grep -q "^$mypattern\$"
then
...
单引号之间的文本逐字传递。如果您希望 shell 执行变量插值,请使用双引号(然后您需要转义任何文字反斜杠、美元符号或反引号)。
推荐阅读
- python - 读取具有多个键的文本文件
- c# - 在 Parallel.Foreach 中调用异步方法的最佳实践/正确方法是什么?
- javascript - Onclick 函数在加载事件侦听器中时未调用
- sharepoint - 如何开始从 SharePoint 外部读取 SharePoint 列表信息?
- python - 将两个单独的数据框之间的对应列组合成新的数据框
- ios - 视图转换后如何修复不均匀的边框宽度?
- angularjs - 如何为自定义 B2C 邀请策略注册 MSAL JS 回调?
- flutter - WidgetsApp 类、MaterialApp 类和 Directionality 类有什么区别
- python - 当复杂索引和基于布尔的条件作为子集时,如何为熊猫数据框赋值?
- yii - Yii 2 高级模板默认后台管理员登录详情