Regex 在if/then语句中放入什么来测试字符串是否包含模式

Regex 在if/then语句中放入什么来测试字符串是否包含模式,regex,bash,Regex,Bash,我试图找出如何测试字符串是否包含模式。我还没有成功 我试过使用=~但似乎不起作用 IFS=; count=0; lspciarray=(); mylspciarrays=($(lspci -v)); for lspciarrays in "${mylspciarrays[@]}"; do lspciarray[$count]=$lspciarrays; if [[ lspciarray[$count]=~^[0-9a-f][0-9a-f][:][0-9a-f][0-9a-f][.

我试图找出如何测试字符串是否包含模式。我还没有成功

我试过使用=~但似乎不起作用

IFS=;
count=0;
lspciarray=();
mylspciarrays=($(lspci -v));
for lspciarrays in "${mylspciarrays[@]}";
    do lspciarray[$count]=$lspciarrays;
    if [[ lspciarray[$count]=~^[0-9a-f][0-9a-f][:][0-9a-f][0-9a-f][.][0-9a-f]* ]];
        then echo ${lspciarray[$count]};
    fi;
    ((count++));
done;
unset IFS;
我希望只得到包含模式的行^[0-9a-f][0-9a-f][:][0-9a-f][0-9a-f][.][0-9a-f]*,但我仍然得到lspci-v的完整输出

[[ $anything=~$anything ]]]

始终为true,因为
=~
不会被视为没有空格的运算符;相反,您要检查扩展的结果是否为空字符串。因为它有一个常量组件(即
=~
),所以它总是非空的,所以操作的结果总是正确的。

请将代码粘贴为代码--多行,等等。另外,请注意
=~
,与其他操作符一样,它周围需要空格。另外,请参阅,请看……在这里提问之前,也许要养成运行代码的习惯?基本上,他是在做一个值赋值,所以它总是正确的?因为它在
[[]]
中,它不是一个赋值,而是一个测试;但是,当您仅传递该语法一个单词时,执行的测试是检查该单词是否为非空。