# Checking if we dealing with 1050 or 1050 Ti
function gpu_check() {
test="GPU 0: GeForce GTX 1050 (UUID: GPU-97acce0b-4304-01e9-ef9d-bc3230cae912)"
echo "testing $test"
if [[ $test =~ "\sGTX\s1050\s" ]]; then
echo "foud 1050"
else
echo "no 1050's here"
fi
}
我正在尝试使用正则表达式,但我可以想象所有可能的变体,例如double \,添加*和。*,使用“$ test”等等,给我的不是我所期待的。
测试GPU 0:GeForce GTX 1050(UUID:GPU-97acce0b-4304-01e9-ef9d-bc3230cae912)
没有1050在这里
我如何让它发挥作用?
答案 0 :(得分:3)
re='[[:space:]]GTX[[:space:]]1050[[:space:]]'
[[ $test =~ $re ]]
......会做的。
\s
是PCRE语法。 =~
仅保证POSIX ERE语法,因此PCRE扩展不可用。 [[:space:]]
是符合POSIX标准的等效文件。=~ $re
中的值被视为正则表达式而非精确值,则必须为=~ "$re"
而不是re
要搜索的字符串。引用the bash-hackers wiki上的文档:
使用operator =〜,左侧操作数与右侧的扩展正则表达式(ERE)匹配。
这与模式匹配是一致的:正则表达式的每个引用部分都是字面意思,即使它包含正则表达式特殊字符。
最佳做法是将正则表达式与变量匹配。这是为了避免在其他有效的正则表达式上解析shell错误。