Bash - 检查文件路径中的字符串

Bash - check for a string in file path

如何检查 bash 中文件路径中的字符串?我正在尝试:

if [[$(echo "${filePathVar}" | sed 's#//#:#g#') == *"File.java"* ]]

将路径中的所有正斜杠替换为冒号 (:)。它不工作。 Bash 将文件路径字符串视为文件路径并抛出错误 "No such file or directory"。目的是让它将文件路径视为字符串。

示例:filePathVar 可以是

**/myloc/src/File.java

在这种情况下,检查应该 return 为真。

请注意,我在 Jenkins 作业中编写此脚本作为构建步骤。

Updates as of 12/15/15

下面的return是Not found,这是错误的

#!/bin/bash
sources="**/src/TESTS/A.java **/src/TESTS/B.java"

if [[ "${sources}" = ~B.java[^/]*$ ]];
then
echo "Found!!"
else
echo "Not Found!!"
fi

下面的returns Found也错了(去掉比较器=周围的space)。

#!/bin/bash
sources="**/src/TESTS/A.java **/src/TESTS/C.java"

if [[ "${sources}"=~B.java[^/]*$ ]];
then
echo "Found!!"
else
echo "Not Found!!"
fi

比较操作显然不起作用。

使用 bash 的内置正则表达式匹配工具更容易:

$ filePathVar=/myLoc/src/File.java
if [[ "$filePathVar" =~ File.java[^/]*$ ]]; then echo Match; else echo No Match; fi
Match

[[...]] 内部,运算符 =~ 进行正则表达式匹配。正则表达式 File.java[^/]* 匹配任何包含 File.java 的字符串(可选后跟除 /.

之外的任何内容)

它以更简单的方式工作,如下所示:

#!/bin/bash
sources="**/src/TESTS/A.java **/src/TESTS/B.java"
if [[ $sources == *"A.java"* ]]
then
echo "Found!!"
else
echo "Not Found!!"
fi