我正在编写一个执行各种任务的 bash 程序。我有一个 IF 语句可能会导致问题。下面的脚本正确吗?
if [[ ! $description =~ "Design" ]] || [[ ! $description =~ "Digital" ]]; then
echo 'Does not match Design or Digital'
else
echo 'A match has been found'
fi
答案1
我找到了解决这个问题的办法。正如您提到的steeldriver,它在语法上是正确的,但我对子句中的运算符进行了修改。
#/bin/bash
description="Advert"
if [[ $description =~ "Design" ]] || [[ $description =~ "Digital" ]]; then
echo 'Matches Design or Digital'
else
echo 'Does not match'
fi
谢谢大家的建议!
答案2
为了使输出的消息在原文中正确,第一个回显应该说Does not match Design *and* Digital
。Digital Design
例如,在字符串 上会找到匹配项。
=~
在 中使用正则表达式运算符时bash
,左侧应是带引号的字符串,右侧通常应不带引号:
#/bin/bash
description='Advert'
if [[ "$description" =~ Design ]] ||
[[ "$description" =~ Digital ]]; then
echo 'Matches Design or Digital'
else
echo 'Does not match'
fi
这并不重要这情况下,但它在以下情况下会发生:
description='Advert'
if [[ "$description" =~ "Ad.*" ]]; then
echo 'Matches "Ad.*"'
else
echo 'Does not match'
fi
这将打印Does not match
.